2012-04-27 28 views
6

Ho un vecchio repository Git, lo chiamo app. Poi, dopo un anno, volevo ricostruire l'app da zero, quindi ho creato un nuovo repository, chiamandolo app-2.Concatena la cronologia di due repository Git?

Ora, mi rendo conto che avrei dovuto appena fatto una nuova filiale o qualcosa, invece di una nuova pronti contro termine, perché voglio spostare la storia della app-2 in cima app e poi sbarazzarsi di app-2 in modo che ora ha app tutta la cronologia di app + app-2.

È possibile fare questo?

UPDATE:

ho provato "resettare" il app repo rimuovendo tutti i file in app (tranne che per la directory .git) e facendo un commit. Poi:

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

Ma, ho avuto conflitti in luoghi in cui ho avuto filiali in app-2.

È possibile applicare il commit da app-2 mantenendo la struttura di diramazione della cronologia di app-2?

+0

C'è un motivo per cui è necessario che siano nello stesso pronti contro termine? E se è così, c'è una ragione per cui devono essere nello stesso ramo? Perché non avere solo un ramo separato per archiviare la cronologia della vecchia versione, e quindi rendere la tua attuale nuova app il ramo principale così com'è? – Amber

risposta

2

Per questo è possibile utilizzare i punti di innesto di git. Innanzitutto, estrai la cronologia di app in app-2 da un telecomando, quindi segui le istruzioni, ad es. in this answer.

+0

In particolare: è possibile utilizzare 'git filter-branch' per trasformare una storia innestata in una cronologia" reale ", quindi eliminare il punto di innesto. Tieni presente che questo cambierà tutti i tuoi ID di commit! – duskwuff

0

Il primo passo è ottenere le due app in un repository; il secondo passo è unirli in qualche modo ragionevole.

Per passo uno direi spingere tutte le filiali repository in App-2 alle filiali nel repository app:

$ 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 

Ora sopra nel repository applicazione di avere tutti i suoi rami e tutte le app -2 rami. Diciamo che (vuoi) considerare l'app-2 come derivata dall'app. Poi si rebase tutti App-2 on app con:

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

questo potrebbe comportare un sacco di lavoro per risolvere i conflitti, ma git farà carichi di lavoro anche per te.

+1

nit: 'git add remote' dovrebbe essere' git remote add' –

Problemi correlati