2009-07-17 18 views
14

Tengo dos bases de código, Código base-1, Código Base-2.¿Puedo fusionar dos repositorios Git con contenido similar pero sin compartir ancestros?

corro los comandos ...

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

... en ambos repositorios (directorios).

Existen diferencias de código entre el código base-1 y el código base-2.

No puedo ramificarlos porque ya contienen diferencias de aproximadamente 0.1%. Los nombres de archivo son los mismos, pero hay algunas ediciones leves en el código.

¿Hay alguna manera de unir las diferencias entre los dos repositorios?

Editado:

Por ejemplo, digamos que tengo el siguiente. Esto es con lo que estoy empezando. Existen ligeras diferencias entre código base 1 y 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, podría borrar código base-2, ya que es un poco más nuevo.

¿Cómo fusionaría estas bases de código, para que finalmente salga con uno con los archivos combinados?

Respuesta

7

el problema podría viene del hecho de esos son dos repositorio diferente (con un SHA-1 primer nodo diferente), y no uno repo clonado y luego modificado.
Eso significa que un 'git fetch' probablemente no sea suficiente.

Usted simplemente puede usar una herramienta externa (externa a Git que es) para fusionar el contenido de de CB2 (Código-Base-2) en CB1, como WinMerge como se sugiere en la pregunta "Merging in changes from outside a git repository".

La otra opción sería utilizar alguna técnica de injerto para completar una zona de alcance: véase la pregunta "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 

Plus modificar el archivo de injerto (.git/info/grafts) para vincular las confirmaciones de project2 a proyecto1.

-2

Crea el primer repositorio como lo has descrito.

En la segunda carpeta crear un archivo llamado ".git" con el contenido:

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

En el segundo repositorio ahora puede ejecutar git diff, git add/etc comprometerse a fusionar en su cambios.

+0

Podría ser un poco más específico. Por ejemplo, digamos que tengo lo siguiente. Esto es con lo que estoy empezando. Existen ligeras diferencias entre la base de código 1 y 2. [mayúscula de código] code-base-1/ code-base-1 /.git [cosas git con repo ya creado] código-base-1/archivo1 código-base-1/fichero2 código-base-2/ código-base-2/.git [cosas git con repo ya creado] code-base-2/file1 code-base-2/file2 Idealmente, podría eliminar code-base-2 porque es un poco más nuevo. Cómo fusionaría estas bases de código. Para que finalmente salga con uno con los archivos fusionados. –

+0

Ese comentario no se formateó correctamente, ver arriba. –

4

Probar:

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

Esto uniría dos versiones del mismo proyecto como si fueran proyectos diferentes (si no tienen compromisos de curso comunes). –

Cuestiones relacionadas