Preparar

El primer paso para migrar un proyecto de SVN a un control de versiones basado en Git es preparar la mÔquina local del responsable de la migración. En esta fase, descargarÔs un script de utilidad, montarÔs un sistema de archivos que distinga entre mayúsculas y minúsculas (si es necesario) y asignarÔs la información de autor de SVN a Git.

Todos los pasos siguientes se deben realizar en el equipo local del responsable de la migración.

Descarga el script de migración

Git incluye la mayoría de las herramientas necesarias para importar un repositorio SVN; sin embargo, faltan algunas funciones que Atlassian ha incorporado en un prÔctico archivo JAR. Este archivo serÔ fundamental para la migración, así que asegúrate de descargar svn-migration-scripts.jar desde la cuenta de Bitbucket de Atlassian. En esta guía se da por hecho que lo has guardado en tu directorio principal. Información importante: para la migración de SVN, se necesita un sistema de archivos que distinga entre mayúsculas y minúsculas, y esto no funciona en NTFS. Te sugerimos que lo utilices en un equipo con Linux. 

Una vez que lo hayas descargado, es recomendable que verifiques los scripts para asegurarte de que tienes instalados Java Runtime Environment, Git, Subversion y la utilidad git-svn. Abre el sĆ­mbolo del sistema y ejecuta este comando:

java -jar ~/svn-migration-scripts.jar verify

Esto mostrarÔ un mensaje de error en la consola si no tienes los programas necesarios para el proceso de migración. Asegúrate de que el software que falta esté instalado antes de continuar.

Si recibes una advertencia que indica que no es posible determinar una versión, ejecuta export LANG=C (*nix) o SET LANG=C (Windows) e inténtalo de nuevo.

Si estÔs haciendo la migración en un equipo con OS X, también verÔs la siguiente advertencia:

You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.

Hablaremos de ello en el apartado siguiente.

Monta una imagen de disco que distinga entre mayĆŗsculas y minĆŗsculas

La migración a Git debe hacerse en un sistema de archivos que distinga entre mayúsculas y minúsculas para evitar dañar el repositorio. Esto supone un problema si la migración se hace en un equipo con OS X, ya que el sistema de archivos de OS X no distingue entre mayúsculas y minúsculas.

Si no tienes instalado OS X, todo lo que tienes que hacer es crear un directorio en tu mÔquina local llamado ~/GitMigration. Aquí es donde harÔs la conversión. Después de eso, puedes pasar a la siguiente sección.

Migración de Git: montar una imagen de disco

Si tienes OS X, debes montar una imagen de disco que distinga entre mayúsculas y minúsculas con el script create-disk-image incluido en svn-migration-scripts.jar. Se necesitan dos parÔmetros:

1. El tamaƱo de la imagen de disco que se va a crear en gigabytes. Puedes usar el tamaƱo que quieras, siempre y cuando sea mƔs grande que el repositorio SVN que intentas migrar.

2. El nombre de la imagen de disco. En esta guĆ­a se utiliza GitMigration para este valor.

Por ejemplo, el siguiente comando crea una imagen de disco de 5Ā GB llamada GitMigration:

java -jar ~/svn-migration-scripts.jar create-disk-image 5 GitMigration

La imagen de disco estÔ montada en el directorio principal, por lo que ahora deberías ver un directorio llamado ~/GitMigration en tu equipo local. Esto sirve como un sistema de archivos virtual que distingue entre mayúsculas y minúsculas, y es donde almacenarÔs el repositorio de Git convertido.

Extrae la información de autor

SVN solo registra el nombre de usuario del autor en cada revisión. Sin embargo, Git almacena el nombre completo y la dirección de correo electrónico del autor. Esto significa que necesitas crear un archivo de texto que asigne los nombres de usuario de SVN a sus equivalentes en Git.

Migración de Git: asignar los nombres de usuario de SVN a nombres de usuario de Git

Ejecuta los siguientes comandos para generar automƔticamente este archivo de texto:

cd ~/GitMigration 
java -jar ~/svn-migration-scripts.jar authors <svn_repo_uri> > authors.txt

Sustituye <svn_repo_uri> por el URI del repositorio SVN que quieres migrar. Por ejemplo, si tu repositorio residĆ­a en https://svn.example.com, podrĆ­as ejecutar lo siguiente:

java -jar ~/svn-migration-scripts.jar authors https://svn.example.com > authors.txt

Esto crea un archivo de texto llamado authors.txt que contiene el nombre de usuario de cada autor en el repositorio SVN junto con un nombre y una dirección de correo electrónico generados. Debería ser algo así:

j.doe = j.doe <j.doe@mycompany.com> 
m.smith = m.smith <m.smith@mycompany.com>

Cambia la parte a la derecha del signo igual por el nombre y la dirección de correo electrónico completos del usuario correspondiente. Por ejemplo, podrías cambiar los autores anteriores a:

j.doe = John Doe <john.doe@atlassian.com>
m.smith = Mary Smith <mary.smith@atlassian.com>

Resumen

Ahora que tienes tus scripts de migración, la imagen de disco (solo SO X) y la información de autor, estÔs listo para importar tu historia de SVN a un repositorio Git nuevo. La próxima fase explica cómo funciona esta conversión.

Recomendado para ti

Blog de Bitbucket

Ruta de aprendizaje de DevOps

MÔs información sobre Git

Encuentra mƔs guƭas y recursos de Git en este centro.