2009-07-17 8 views
14

Ho due basi di codice, codice base-1, codice base-2.Posso unire due repository Git con contenuti simili, ma non condividere alcun antenato?

corro i comandi ...

git init 
git add . 
git commit -m "Initial Commit" 

... in entrambi i repository (directory).

Ci sono differenze di codice tra codice base-1 e codice base-2.

Non riesco a diramarli perché contengono già differenze di circa lo 0,1%. I nomi dei file sono gli stessi ma ci sono alcune leggere modifiche al codice.

C'è un modo per unire le differenze tra i due repository?

Modificato:

Per esempio, diciamo che ho il seguente. Questo è quello con cui sto iniziando. Ci sono piccole differenze tra codebase 1 e 2.

[oldest code case] 
code-base-1/ 
code-base-1/.git [git stuff with already created repo] 
code-base-1/file1 
code-base-1/file2 

code-base-2/ 
code-base-2/.git [git stuff with already created repo] 
code-base-2/file1 
code-base-2/file2 

Idealmente, avrei potuto cancellare codebase-2 perché è un po 'più recente.

Come potrei unire queste basi di codice, in modo che alla fine ne venga fuori una con i file uniti?

risposta

7

Il problema potrebbe deriva dal fatto quelli sono due differenti repository (con un diverso SHA-1 primo nodo), e non uno repo clonato e poi modificato.
Ciò significa che "git fetch" probabilmente non è sufficiente.

Si potrebbe semplicemente utilizzare uno strumento esterno (esterno al Git che è) per unire il contenuto di di CB2 (Codice-Base-2) in CB1, come WinMerge come suggerito nella domanda "Merging in changes from outside a git repository".

L'altra opzione sarebbe utilizzando una tecnica di innesto per completare un'operazione di recupero: vedi la domanda "Can two identically structured git repos be merged when they have never had any common history?"

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

Inoltre modificare il file di innesto (.git/info/grafts) per collegare i commit di project2 a Project1.

-2

Creare il primo repository come descritto.

Nella seconda cartella di creare un file chiamato ".git" con il contenuto:

gitdir: <path-to-first-repository>/.git 

Nel secondo repository è ora possibile eseguire git diff, git add/commit ecc a fondersi nella vostra i cambiamenti.

+0

Potrebbe essere un po 'più specifico. Ad esempio, supponiamo di avere il seguente. Questo è quello con cui sto iniziando. Ci sono lievi differenze tra codebase 1 e 2. [codice precedente] codice-base-1/ codice-base-1 /.git [roba git con repository già creato] codice-base-1/file1 codice-base-1/file2 codice-base-2/ codice-base-2/.git [roba con repository già creato] codice-base-2/file1 codice-base-2/file2 Idealmente, potrei cancellare codice-base-2 perché è un po 'più recente. Come unire queste basi di codice. In modo che alla fine ne esca uno con i file uniti. –

+0

Questo commento non è stato formattato correttamente, vedi sopra. –

4

Prova:

cd code-base-1 
git fetch ../code-base-2 master:code-base-2 
git merge code-base-2 
+0

Unirebbe due versioni dello stesso progetto come se fossero progetti diversi (se non hanno committenze comuni di cours). –

Problemi correlati