Migrar un repositorio de subversión a uno de git
Introducción
En este artículo vamos a explicar como migrar un repositorio de código que tenemos en subversion a un repositorio git conservando el historial de commits que tenga originalmente.
Proceso
Requisitos
Si no tenemos instalado git, lo instalamos:
>> sudo apt-get install git git-svn
Y configuramos un usuario y email (que nos servirá para que los repositorios remotos nos reconozcan):
>> git config --global user.name TU_USUARIO >> git config --global user.email TU_EMAIL
Instalamos svn2git que es un programa que nos convertirá un repositorio de subversion a uno en formato git.
>> sudo apt-get install rubygems >> sudo gem install svn2git
Migración
Antes de realizar la migración, tendremos que mapear los usuarios de subversion con los de git. Para ello tendremos que crear un fichero de texto en el que le diremos para cada usuario de subversion el usuario de git al que se le atribuirá sus acciones. El formato de este fichero de texto es el siguiente:
USUARIO_SUBVERSION = USUARIO_GIT <EMAIL_USUARIO_GIT>
Hacemos el fichero con los mapeos que deseemos (por ejemplo en authors.txt).
Una vez tenemos todo lo necesario, procederemos creando un repositorio local vacío y luego importamos el contenido del antiguo repositorio de subversion a través del programa svn2git:
>> git init proyecto.git >> cd proyecto.git >> svn2git http://TUDOMINIO/TUPATH/TU_PROYECTO --username TU_USUARIO_EN_SUBVERSION --authors PATH/authors.txt
Una vez tengamos creado el repositorio local de git con nuestro proyecto, si queremos guardarlo en un repositorio online solo tenemos que añadirlo y subirlo.
Por ejemplo: Si queremos subirlo a la rama master de un repositorio online de bitbucket de url https://myuser@bitbucket.org/myuser/myproject.git con el usuario myuser, tendremos que ejecutar los siguiente comandos:
>> git remote add origin https://myuser@bitbucket.org/myuser/myproject.git >> git push origin master
Problemas
Problema (no author) not defined
Al importar el proyecto de subversión a nuestro repositorio local de git, obtenemos el siguiente error:
>> svn2git http://TUDOMINIO/TUPATH/TUPROYECTO --username intropedro --authors TURUTA/authors.txt command failed: 2>&1 git svn fetch
Para ver los detalles del error ejecutamos el siguiente comando:
>> git svn fetch Author: (no author) not defined in TURUTA/authors.txt file
Solución
El problema esta en que hay commits en nuestro repositorio de subvesion que no se hicieron con ningún usuario. Para solucionarlo solo tenemos que añadir la siguiente fila a nuestro archivo de autores:
(no author) = TU_USUARIO_EN_GIT <TU_EMAIL_EN_GIT>