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 é o
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.txtEste 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-tmpEste 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.gitgit push origin — all
A partir deste momento será possivel sincronizar o repositório migrado com o servidor de Git.
