2009-03-16 8 views
7

Ho due piccoli repository git. Entrambi i progetti partivano da punti diversi ma convergevano in uno molto simile (stessi nomi di file, struttura delle cartelle, ecc.). Uno non è un ramo dell'altro, ma uno può essere considerato un'evoluzione dell'altro.È possibile unire due repository git identicamente strutturati quando non hanno mai avuto una storia comune?

Sarebbe bello se potessi unire i due in modo che repo2 sia la continuazione di repo1. È possibile, aggiungendo la cronologia di repo2 alla fine di repo1?

risposta

7

È possibile fetch one into another:

$ cd project1 
$ git config remote.project2.url /path/to/project2 
$ git config remote.project2.fetch 'refs/heads/*:refs/project2/*' 
$ git fetch project 

Che vi darà due (o più) rami, contenente la storia del progetto1 e project2. Sono ancora completamente indipendenti, basta usare lo stesso archivio oggetti.

Allora (non testato), è possibile utilizzare un file trapianto (.git/info/grafts) dove si poteva sovrascrivere il genitore di un commit (come il primo di progetto2 avere per il genitore l'ultima delle progetto1)

Come Dustin Dice nei commenti, un rebase è in ordine per "renderlo permanente", ripetendo il project2 si impegna su project1.


avete un altro illustrazione in questo blog "Using Git within a project (forking around)", in particolare la sezione "Come tirare amici e influenzare la gente". Anche in questo caso:

git checkout two_point_ooh 
git remote add strelau git://gitorious.org/ruby-on-rails-tmbundle/mainline.git 
git checkout -b strelau/two_point_ooh 
git pull strelau two_point_ooh 

è un processo simile, ma per i depositi che sono biforcuta (che non è esattamente il vostro caso)

+0

nota che si dovrebbe rebase dopo l'innesto al tipo di rendere "permanente". – Dustin