Migrando do SVN para GIT
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.