Por José Luis Rodríguez Alonso y Aitor Santana
En este artículo voy a explicar como unir varios repositorios de Git en uno solo, llevándonos también el histórico de commits que tengamos en cada uno de los repositorios que queramos unir.
Esta problemática me surgió porque quería tener un único repositorio para las katas, tenía demasiados repositorios sueltos y quería organizarlo un poco.
Después de consultarlo con algunos compañeros, José Luis Rodríguez me dió la clave, me comentó que él lo había hecho en algún proyecto y me pasó la receta que solucionó todos mis problemas.
Lo apliqué casi al pie de la letra, tuve que tener en cuenta algunas cosillas, pero funcionó. Veamos cuál es esa receta mágica 🪄.
Para poder realizar estos pasos son necesarios conocimientos sobre las ramas de Git, comandos tales como:
checkout
branch
merge
rebase
Te recomiendo este cheat sheet de Git creado por el equipo de GitHub, en el que se ven estos comandos y lo más utilizados en Git.
Lo primero que haremos será crear un repositorio vacío, en el cual queramos tener la unión de nuestros repositorios.
|
|
Una vez tenemos el repo global, vamos a añadir el origen remoto del repo a copiar.
|
|
Seguidamente nos traemos los cambios de ese repo.
|
|
Y creamos una rama con los cambios que nos hemos traido para empezar la migración.
|
|
Debemos tener en cuenta, que mars-rover-kata hace referencia a la rama en local que hemos generado con el checkout, y mars-rover-kata/main a la rama ‘main’ del remoto que añadimos.
Ahora debemos crear una carpeta para guardar los ficheros que contiene el repositorio.
|
|
Este paso también podemos hacerlo con ayuda de un IDE si nos resulta más cómodo.
Lo siguiente será hacer un commit para guardar los cambios.
|
|
En este punto, podemos repetir los pasos con otros repositorios o directamente pasarlo todo a la rama principal.
Lo único que nos queda es volver a la rama principal y hacer un merge con la rama en la que se encuentran los cambios de otros repositorios.
|
|
Este último comando es la clave de todo, nos permite fusionar dos historias de repositorios no relacionados, importando el contenido del repositorio “mars-rover-kata” al repositorio actual, con un mensaje de commit personalizado. El paso final para unir el global con ‘mars-rover-kata’.
Cuando acabemos, recomiendo que borremos la rama donde estaban los cambios que nos hemos traído y su origen remoto.
|
|
Otra cosa interesante que podemos hacer si tenemos un repositorio con múltiples proyectos, es clonar sólo el directorio con el que vamos a trabajar. Para ello, vamos a usar el comando sparse-checkout
, disponible desde la versión 2.25 de Git.
Es importante que habilitemos el modo “sparse-checkout” para poder hacer esto; de lo contrario, no veremos ningún cambio. Esto lo podemos hacer de la siguiente manera:
|
|
Si ya tenemos este modo habilitado podemos empezar:
|
|
Esta fórmula es una buena opción, si por algún motivo nos piden unir dos o más repositorios y no perder el histórico de cambios, o si, como yo, queréis organizar las katas en un único punto 🤓.
¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.
Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?
Pero espera 🖐 que tenemos un conflicto interno. A nosotros las newsletter nos parecen 💩👎👹 Por eso hemos creado la LEAN LISTA, la primera lista zen, disfrutona y que suena a rock y reggaeton del sector de la programación. Todos hemos recibido newsletters por encima de nuestras posibilidades 😅 por eso este es el compromiso de la Lean Lista