Migração de SVN para GIT
Recentemente foi-me lançado o desafio de migrar um servidor de svn para git , e comecei logo a procura de importações directas, sendo que encontrei sugestões tais como o svn2git e subGit.
No entanto não se adequavam ao que se pretendia fazer, então após mais alguma pesquisa, encontrei várias referências a um comando do git que permitia clonar um repositório de SVN para Git e conseguir manter o histórico do mesmo sem configuraçoes extra ou programa externos. O comando em causa é
git svn clone http://svn/
Atráves deste comando é efectuado um pedido ao servidor de svn e será criada uma nova directória para o repositório em
causa, sendo que este comando tem a possibilidade de aceitar os parametros que podem ser passados para os init e fetch
da utilização de git.
No entanto de nada nos serve um clone de um
repositório sem os logs e o mapeamento dos autores dos commits para o sistema que está a ser utilizado.
Para tal basta utilizar os seguintes comandos.
svn log --xml | grep "<author>" | sort -u | perl -pe 's/._>(._?)<.\*/$1 = /' | tee users.txt
Este primeiro comando deverá ser executado no servidor de svn actual, com este comando será possivel gerar um ficheiro com as informações relativas a todos os autores de commits do svn em causa. Este ficheiro será utilizado como ficheiro de mapeamento de migração de commits e logs para o Git.
git svn clone --stdlayout --no-metadata --authors-file=users.txt svn://hostname/path dest_dir-tmp
Este segundo comando irá fazer clone do repositório no servidor de SVN e irá criar um repositório de Git local,
com a informação de todos os commits e logs deste novo repositório.
Será necessário ainda especificar o remote origin que iremos utilizar para todas as ações futuras,
para tal basta executar os seguintes comandos:
git remote add origin git@server:user/project-name.git
git push origin --all
A partir deste momento será possivel sincronizar o repositório migrado com o servidor de Git.