git

Moviendo algunos archivos de un repositorio Git a otro conservando la historia

Muchos proyectos comienzan como algo chico, dentro de un único repositorio Git, pero a medida que el tiempo avanza, y el proyecto se vuelve algo más complejo, es probable que surja la necesidad de separar una parte del proyecto a otro repositorio. Cuando esto sucede, algo que no queremos es perder toda la historia de esos archivos, o sea, queremos mover los archivos correspondientes a un subproyecto junto con toda su historia.

Objetivo

  • Mover el directorio 1 desde el repositorio A al repositorio B.

Restricciones

  • No queremos mover el resto de los directorios del repositorio A.
  • Queremos mantener el historial de cambios del directorio que moveremos al repositorio B.

Preparándonos para mover

Lo primero que haremos será clonar nuestro repositorio, ¡lo último que queremos es perder información valiosa por ejecutar un comando errado!

Desde el directorio padre donde queremos generar la carpeta con nuestra copia ejecutamos:

git clone .\<DirectorioOrigen> <DirectorioDestino>

Nos movemos dentro del directorio:

cd <DirectorioDestino>

Y removemos el enlace al repositorio origen:

git remote rm origin

De esta forma evitamos hacer cambios sobre el repositorio remoto (en nuestro DirectorioOrigen).

Si los archivos que deseamos mover no se encuentran en un directorio, deberemos moverlos a uno (aquí lo llamaremos directorio 1).

Removiendo lo que ya no queremos

Dejamos sólo el directorio que nos interesa

Ahora ejecutaremos el comando que se encargará de remover todos los archivos que no se encuentren dentro del directorio que le indicamos (aquel que queremos mover al nuevo repositorio):

git filter-branch --subdirectory-filter <directorio 1> -- --all

Quitamos los tags (opcional)

Es probable que hayamos creado tags sobre commits que ya no existen, por lo que borraremos todos los tags que hayan quedado en nuestro repositorio.

Para ello abrimos una ventana de comandos y ejecutamos lo siguiente:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

O en PowerShell:

git tag | foreach-object { git tag -d $_ }

Borrar sólo algunos tags

Si quisiéramos borrar sólo algunos de los tags, por ejemplo aquellos que comiencen con un determinado prefijo, podemos usar el siguiente comando de PowerShell:

git tag | foreach-object { if ($_ -like '<Prefijo>*') { git tag -d $_ } }

Completamos el cambio

Agregamos el link al nuevo repositorio

Para agregar el link al nuevo repositorio que hayamos creado para el subproyecto usamos:

git remote add origin https://url-nuevo-repositorio.git

Podemos verificar que esto esté configurado correctamente usando:

git remote -v

Push de los cambios

Lo último que nos falta es llevar todos estos cambios al nuevo repositorio:

git push -u origin NOMBRE-DEL-BRANCH

Anuncio publicitario

1 comentario en “Moviendo algunos archivos de un repositorio Git a otro conservando la historia

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.