Migrar un repositorio de subversión a uno de git

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>
temas: 

Añadir nuevo comentario