Migrar repositorios de Mercurial a Git
Entorno del tutorial
El siguiente tutorial está desarrollado con el siguiente entorno:
- Portatil MacBook Pro
- Procesador Intel i7 2,8 GHz
- 8 GB memoria RAM
- Disco duro 256 GB SSD
Introduccón
A lo largo de la vida de una organización, es normal que las herramientas que un día son las óptimas para nosotros se vean sustituidas por otras más modernas, eficientes o simplemente, que se adecúen mejor a nuestras nuevas necesidades
Una de estas herramientas puede ser el sistema de control de versiones… Es posible que en los inicios se usara CVS y luego se pasara a Subversion o, como se verá en este tutorial, se empleara Mercurial en un comienzo y se haya acabado usando Git
Cuando se realiza la migración de los datos de un repositorio de código a otro, tenemos que tener en cuenta dos cosas importantes: Por un lado, el número de recursos que necesitamos mover puede ser bastante grande; por otro, es más que interesante mantener los datos históricos tras la migración (saber por qué se ha hecho cada cambio en cada fichero de código, quién lo hizo, etc.).
Por tanto, lo mejor es buscar herramientas que nos ayuden a resolver estos dos problemas. En este caso, vamos a ver como usar la herramienta «fast-export» para migrar los contenidos de un repositorio de Mercurial a un repositorio Git
Primer paso: obtener fast-export
Como puedes ver, estoy considerando que el primer paso va a ser directamente la descarga de «»fast export». Doy por sentado que, a estas alturas, dispones del cliente de Mercurial y del cliente de Git correctamente instalados y funcionando…
Hecha la aclaracón, para obtener «fast-export», vamos a recogerlo de su propio repositorio de Git: http://repo.or.cz/w/fast-export.git
De este repositorio, descargamos una «snapshot», en nuestro caso la versión en «tar.gz», y la descomprimimos donde más nos guste…
Como podéis ver, se trata de un script SH y poco más, no tiene componentes visuales…
Segundo paso: Configurar los repositorios de origen y destino
Una vez que tenemos fast-export listo para usar, descargaremos en nuestro equipo el repositorio de Mercurial que queremos migrar. Para ello, iremos a la carpeta en que deseamos que se descargue y ejecutamos el comando hg clone https://mihost/mirepositorio/proyectoTutorial
y con eso tenemos en local nuestro proyecto
A continuación, tenemos que acceder al repositorio Git. Yo ya tengo un repositorio vacío creado y voy a descargarlo para hacer la importación sobre él:
git clone https://host.de.mi.repo/tutorialEjemplo
Tercer paso: empieza la «magia»
Llegamos al momento crucial… Una vez que tenemos todo lo necesario (los dos repositorios y el script) sólo nos queda juntarlo todo
Vamos al directorio donde se ha creado el directorio de trabajo de Git y ejecutamos el comando:
lo que nos genera la siguiente salida, signo de que todo ha ido bien
/ruta/a/fast-export/hg-fast-export.sh -r /ruta/a/MercurialRepo/repoTutorial/
A continuación, hacemos un «git checkout» para traer al directorio de trabajo los cambios del repositorio local
Ahorta ya tenemos en nuestro directorio local y en la copia local del repositorio Git remoto los commits. Para subirlo al repositorio remoto, ejecutamos el comando
/ruta/a/git/repo/git push origin master
Y ya lo tenemos 🙂
Conclusiones
Ya sabemos todos que la tecnología avanza cada vez más rápido, y las soluciones de hoy serán distintas a las que podamos aplicar mañana. Muchas veces nos quedamos anclados en tecnologías antiguas por miedo a que el cambio se complique…
Sin embargo, ya hemos visto que casi siempre se pueden encontrar herramientas para que estos cambios sean «triviales». No podemos olvidar que, gracias a internet, vivimos en un mundo global, y que es raro que mis problemas o dudas no los haya tenido alguien antes. Por tanto, buceando un poco vais a poder encontrar soluciones a muchas de las situaciones con las que os vais a encontrar
Así que ya sabéis, perded el miedo y si no lo conseguís, podéis contratar a Autentia para que os ayude
Bitbucket quitara el soporte a mercurial y encontré este genial tutorial
Muchísimas gracias por compartirlo.