Múltiples repositorios Git en un solo proyecto
Cómo controlar múltiples repositorios remotos en un solo proyecto de Git.
Git es la herramienta por excelencia para versionar proyectos de programación.
A la fecha, existe un gran número de servicios de Git en la nube, como GitHub, GitLab, Gitea y Bitbucket, entre otros.
Personalmente, llevaba mucho tiempo trabajando con GitLab porque, en ese entonces, era la única herramienta que conocía que permitía tener repositorios privados sin necesidad de pagar. En ese tiempo, GitHub aún no había sido comprado por Microsoft y, para tener repositorios privados, era necesario pagar.
Tengo un cliente con quien tengo varios proyectos. Yo tenía guardados los códigos fuente en GitLab, y dicho cliente me solicitó si podía subirlos a su nuevo repositorio. Habían creado su propio gestor de repositorios Git utilizando el proyecto de Gitea.
Fue allí donde me surgió la duda. Tenía con ellos más de cinco proyectos y todos estaban en GitLab. En teoría, podía tomar cada proyecto, crear su repositorio en el Git de mi cliente y subirlo allí… Pero ¿cómo iba a controlar la sincronización de los proyectos en ambos repositorios?
Resulta que hay una manera. Cuando uno crea un repositorio nuevo, por ejemplo en GitHub, usualmente se muestran algunas sugerencias para subir el código, como estas:
# create a new repository on the command line
echo "# deleteme" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/zhumarcos/deleteme.git
git push -u origin main
# push an existing repository from the command line
git remote add origin https://github.com/zhumarcos/deleteme.git
git branch -M main
git push -u origin main
Hagamos énfasis en el comando git remote add origin. He utilizado estos comandos un sinfín de veces. Para mí, origin era la palabra clave para distinguir al repositorio en línea, y lo es, pero siempre asumí que era la única manera de nombrar al repositorio en la nube.
Resulta que estaba equivocado: origin es el nombre por defecto que se le da al repositorio remoto, pero uno puede utilizar cualquier nombre y, además, agregar más de uno.
Por ejemplo, asumamos que queremos subir un proyecto a GitHub y a GitLab. Los pasos serían:
- Inicializar el proyecto
git init
git add .
git commit -m "Primer commit"
- Agregar GitHub como repositorio remoto
git remote add origin https://github.com/usuario/proyecto.git
- Agregar GitLab como segundo repositorio remoto
git remote add gitlab https://gitlab.com/usuario/proyecto.git
Con esto hemos agregado GitHub como el repositorio por defecto, por eso se definió como origin, y luego agregamos GitLab con el identificador gitlab. Sin embargo, podría haber sido cualquier otro identificador de tu preferencia.
Para listar todos los remotos configurados en el proyecto se puede usar el comando git remote -v en donde aparecería algo como:
origin https://github.com/usuario/proyecto.git (fetch)
origin https://github.com/usuario/proyecto.git (push)
gitlab https://gitlab.com/usuario/proyecto.git (fetch)
gitlab https://gitlab.com/usuario/proyecto.git (push)
Ahora, para subir el código y los futuros cambios que realices, solamente debes indicar a qué repositorio quieres apuntar.
Si es GitHub, usarías git push origin main; en el caso de GitLab, usarías git push gitlab main.
Para eliminar uno de los repositorios, se utiliza el comando git remote remove [nombre_remoto]. Para actualizar un remoto, se utiliza el comando git remote set-url [nombre_remoto] [nueva_url_git].
De esta manera logré resolver mi problema con el cliente. Solo tuve que crear los proyectos en su repositorio y, con el comando de Git remote add, agregar estos repositorios remotos. De esa manera, puedo mantener actualizado mi proyecto en ambos repositorios.