Migrando do SVN para GIT

Taynan Rezende
3 min readDec 6, 2019

Migrando repositórios robustos de 10 anos no SVN para o GIT mantendo todo o histórico de commits.

Grandes empresas perdem seu histórico de commits quando decidem migrar do svn para git, porém migrar repositórios levando todo seu histórico é possível e neste artigo irei mostrar como.

1º Utilize Linux

Para realizarmos a migração de nosso repositório será imprescindível a utilização do Linux.

2º Configurar ambiente

Para realizarmos a migração iremos utilizar este script de migração svn-migration-scripts.jar disponibilizado pela Atlassian, também iremos precisar do Java Runtime Environment , Git , Subversion e o utilitário git-svn estejam instalados.

Para verificar se está tudo correto abra um prompt de comando e execute o seguinte:

java -jar ~/svn-migration-scripts.jar verify

3º Criar arquivo authors.txt

No svn os usuários são identificados apenas pelo nome do usuário <nome.sobrenome>, já no git temos o nome de usuário e também o e-mail <nome sobrenome, nome@mail.com>, portanto teremos que criar um arquivo que chamaremos de authors.txt onde iremos realizar este DE-PARA.

Execute o seguinte:

java -jar svn-migration-scripts.jar authors <URL repo SVN> > authors.txt

4º Realizar o clone do repositório do SVN para o GIT

Quando falamos de SVN devemos levar em consideração que cada um pode estar utilizando um padrão diferente, o que seria isso ? Estamos falando do padrão de repositórios como “ — trunk”, “ — fix” ou “ — prod”.

Se você utiliza este padrão irá utilizar o “— stdlayout” para realizar o clone.

Se você utiliza um padrão diferente você pode passar para o comando os parâmetros informando qual a nomenclatura do seu repositório, como por exemplo:

git svn clone --prefix=’’ --trunk=/<pasta relativa> --authors-file=authors.txt <URL repo SVN> <nome do novo repo git>

Neste caso sugiro utilizar o “— prefix=’’ ” pois se desejar atualizar este repositório futuramente irá te prevenir de alguns problemas, pois o comando utilizado para realizar a atualização espera que exista este prefix.

Se o seu cenário é o padrão como mencionei anteriormente utilize o “— stdlayout”.
Execute o seguinte:

git svn clone --stdlayout --authors-file=authors.txt <URL repo SVN> <nome do novo repositório git>

Esta etapa pode demorar bastante tempo dependendo do tamanho do repositório, pois irá migrar revisão uma a uma para o git.

5º Limpar o novo repositório que acabamos de criar removendo .svn

Com a execução do svn clone algumas coisas do svn são trazidas para o novo repositório git, portanto devemos limpar esse novo repositório.

Execute o seguinte:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Irá apresentar tudo que deve ser limpo. Execute o mesmo comando novamente com “— force” para remover.

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

6º Adicionar remote origin e realizar o push do repositório

Execute o seguinte:

git remote add origin https://URL.git

Execute o seguinte:

git push -u origin --all

Pronto migramos nosso primeiro repositório SVN para o GIT.

Atualizar repositório

Se desejarmos as últimas alterações realizadas ainda no SVN.

Execute o seguinte:

git svn fetch

Sincronizar novas alterações

Para sincronizar as novas alterações buscadas no passo anterior.

Execute o seguinte:

java -Dfile.encoding=utf-8 -jar ~svn-migration-scripts.jar sync-rebase

Após executar irá aparecer as novas atualizações, execute “git log” para confirmar.

Para finalizar a atualização

Execute o 5º passo novamente e realize o push das novas alterações buscadas.

--

--