2012-04-27 36 views
6

Tengo un antiguo repositorio de Git, llámalo app. Luego, después de un año, quería reconstruir la aplicación desde cero, así que hice un nuevo repositorio, llámalo app-2.Concatenar la historia de dos repositorios Git?

Ahora, me doy cuenta de que debería haber acaba de hacer una nueva rama o algo, en lugar de una nueva operación, porque quiero mover la historia de app-2 en la parte superior de app y luego deshacerse de app-2app modo que ahora tiene toda la historia de app + app-2.

¿Es esto posible?

ACTUALIZACIÓN:

I intentado "resetear" el repositorio app mediante la eliminación de todos los archivos de app (excepto para el directorio .git) y hacer un commit. Entonces:

cd ~/Projects/app-2 
git format-patch --stdout --root master > ../app/app-2-patches.txt 
cd ../app 
git am app-2-patches.txt 

Pero, tengo conflictos en lugares en los que tenía ramificaciones en app-2.

¿Es posible aplicar los commits desde app-2 manteniendo la estructura de bifurcación del historial de app-2?

+0

¿Hay alguna razón por la que necesite que estén en el mismo repositorio? Y si es así, ¿hay alguna razón por la que tengan que estar en la misma rama? ¿Por qué no tener una sucursal separada para almacenar el historial de la versión anterior y luego simplemente hacer que su nueva aplicación actual sea la rama principal tal como está? – Amber

Respuesta

2

Puede usar los puntos de injerto de git para esto. Primero extraiga el historial de app en app-2 desde un control remoto, luego siga las instrucciones, p. en this answer.

+0

Específicamente: puede usar 'git filter-branch' para convertir un historial injertado en historial" real ", luego deshacerse del punto de injerto. ¡Ten en cuenta que esto cambiará todas tus identificaciones de commit! – duskwuff

0

El primer paso es obtener las dos aplicaciones en un repo; el segundo paso es unirlos de una manera sensata.

Para el paso uno diría que empujar todas las ramas del repositorio en App-2 a las sucursales en el repositorio de aplicaciones:

$ cd /path/to/app-2 
$ git remote add app-repo /path/to/app 
$ git push app-repo master:app-2-master  # master in app-2 goes to app-2-master in app repo 
# repeat for other branches in app-2 

Ahora otra vez en el repositorio de aplicaciones que tiene todas sus ramas y toda la aplicación -2 ramas. Digamos que (quiere) considerar la aplicación 2 como derivada de la aplicación. A continuación se rebase todas las aplicaciones-2 en la aplicación con:

$ cd /path/to/app 
$ git checkout app-2-master 
$ git rebase master 

esto podría implicar un montón de trabajo para resolver los conflictos, pero Git va a hacer un montón de trabajo para usted también.

+1

nit: 'git add remote' debe ser' git remote add' –