Migración de repositorios GIT

En mi trabajo usamos un esquema centralizado, es decir, un repositorio donde se centraliza todo el código. En éste se encuentran dos ramas, la master, cuyo HEAD apunta siempre a la última versión que se corresponde a la desplegada en producción y la devel, cuyo HEAD apunta a la última versión en desarrollo.

El caso es que tenemos para cada proyecto un repositorio de este tipo en una máquina que, aunque simpática, se nos está quedando corta por lo que estoy migrando los repositorios a otra máquina. Se me ha dado un caso en particular que ha sido la necesidad de migrar el contenido de un repositorio clonado del antiguo a un repositorio ya existente en la máquina destino.

Dado que estamos en un repositorio clonado, éste tendrá una referencia al repositorio del que fue clonado denominada origin. Supongamos que ésta apunta a http://server_orig.com/git/repo/ y que el nuevo repositorio está ubicado en http://server_dest.com/git/repo/ y está vacío. Pues bien, la receta (supongo que una de muchas) que he usado es la siguiente. Desde el directorio donde está ubicado nuestro repositorio clonado:

# Hacemos que nuestro repositorio apunte al nuevo con otro nombre
$ git remote add dest http://server_dest.com/git/repo/
# Enviamos nuestras ramas "master" y "devel" al nuevo repositorio
$ git push -u dest --all
# Eliminamos las referencias a los repositorios remotos existentes
$ git remote rm origin
$ git remote rm dest
# Hacemos que "origin" (remote por defecto) apunte al nuevo repositorio
$ git remote add http://server_dest.com/git/repo/

Se puede hacer de más formas (borro el origin y lo creo de nuevo apuntando al nuevo, etcétera) pero al menos el concepto queda claro. Hay que tener en cuenta que git push -u dest --all envía todas las ramas de nuestro repositorio al nuevo. Eso quiere decir que si tenemos más ramas en el repositorio original, si no las tenemos en local, no se enviarán.

Espero que os sirva. Que paséis un estupendo fin de semana!