Migrar repositorio Mercurial a Git en Windows

El siguiente post lo escribo como crónica que espero quede como referencia para el futuro, para aquellos que tengan que pasar por lo mismo y no quieran sufrir las horas que yo he sufrido.

El escenario que vamos a utilizar como base es la existencia de un repositorio Mercurial en la ruta C:\Repos\MiProyecto, y los requisitos que debemos tener previamente son:

  1. Instalar Git para Windows (64bits).
  2. Instalar Python 2.7 (64bits) para Windows. NO BAJAR Python 3.
  3. Instalar el modulo de Mercurial (64bits) para Python en Windows

Una vez que lo instalamos, agregamos Python al PATH de Windows, para eso podemos usar el editor de Environment Variables (Variables de Entorno) de Windows:

Realizando la migración a Git

Vamos a usar un modulo de Python conocido como hg-fast-export.

Abrimos Git Bash (disponible por las instalación de Git para Windows):

Creamos una carpeta y clonamos hg-fast-export:

cd /C/Repos
mkdir fast-export
cd fast-export
git clone http://repo.or.cz/r/fast-export.git

Ahora creamos un repo de Git que va a ser el resultado de nuestra conversión:

cd ..
mkdir MiProyectoGit
cd MiProyectoGit
git init

Posicionados en la carpeta del nuevo repo Git ejecutamos:

../fast-export/hg-fast-export.sh -r ../MiProyecto -e cp1252

Donde el atributo -r apunta al repo de Mercurial que queremos convertir.

Opcionalmente si queremos mapear usuarios de Mercurial a Git, podemos crear un archivo authors.txt que contenga una línea por cada mapeo, por ejemplo:

juan <[email protected]>=juan <[email protected]>

Y en ese caso la línea anterior de exportación sería:

../fast-export/hg-fast-export.sh -r ../MiProyecto -A authors.txt -e cp1252

Una vez que la migración fue exitosa, falta sólo ejecutar:

git checkout HEAD

Sería conveniente, si teníamos un archivo .hgignore migrarlo a Git con:

git mv .hgignore .gitignore

Y luego hacer un Commit.

Errores comunes

Si al ejecutar el comando aparece un mensaje que dice No module named mercurial es porque en la carpeta donde tenemos Python, no está el modulo de Mercurial (o no se instaló o quedó en otra ruta diferente). Debería estar en c:\Carpeta_con_Python\lib\site_packages\mercurial.

Si obtenemos un mensaje que dice DLL load failed: %1 is not a valid Win32 application es porque alguno de los 3 componentes (GIT, Python o el modulo de mercurial) es de 32 bits. Revisar y reinstalar todo para 64 bits.

Conclusión

Espero que esta breve pero práctica guía los ayude en caso de que alguna vez tengan que pasar por este proceso de migración y les ahorre el tan preciado tiempo.


Also published on Medium.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *