2010-02-12 23 views
5

Tengo un repositorio principal (repo 1) con el que trabajo. Tengo otro repo (repo 2) que debe encajar en el primero y no estoy seguro de cómo podría tenerlos a ambos en la misma carpeta. La idea es que tengo una base de código estándar que necesito en cada proyecto; sin embargo, cada proyecto es su propio repositorio git.¿Cómo se combinan dos repositorios git?

/project 
    /.git(repo 2) 
    /.git(repo 1) 
    /repo_2_sub 
     /repo_2_sub_sub 
      /repo_1_sub_sub 
    /repo_1_sub 
     /repo_1_sub_sub 
     /repo_2_sub_sub 

Ninguno de los archivos se superpone, pero algunas estructuras de carpetas sí. Por lo tanto, a veces ciertas carpetas de un repos se encuentran en el otro repositorio.

¿Cómo puedo trabajar para que estos dos repositorios compilen la base de código completa? Existen

ACTUALIZACIÓN

Ambos repositorios Git en el mismo nivel de la carpeta raíz del proyecto. No pueden ser submódulos, ya que se cruzan uno con el otro como se muestra arriba. No son carpetas separadas.

ACTUALIZACIÓN 2

Espere, tal vez esto es más fácil de lo que pensaba. ¿Se puede clonar un repositorio estándar de la base de código y luego crear una nueva rama que sea su proyecto y luego seguir fusionando esa rama con el repositorio de la base de código cada vez que cambie?

+1

Al leer las actualizaciones y respuestas aquí, parece que la respuesta correcta es separar los dos proyectos distintos en una estructura de dependencia más sana. – Novelocrat

+0

Sí, eso creo. – Xeoncross

Respuesta

1

Espera, tal vez esto es más fácil de lo pensamiento. ¿Puede clonar un repositorio de código base estándar y luego crear una nueva rama que sea su proyecto y luego seguir fusionando esa rama con el repositorio de código base cada vez que cambie?

Usted podría hacer eso. También tengo un proyecto donde lo estoy haciendo así. La mayoría del código es el mismo para todos los subproyectos. Creé una nueva rama para cada proyecto para mantener separados los archivos que solo pertenecen a ese proyecto. Combino regularmente la rama master en las otras ramas.

También podría crear clones del repositorio principal. Luego, fusionaría los cambios de la rama origin/master en la rama master en cada uno de sus proyectos.

+0

Parece que esta es la manera más fácil de manejar algo como esto, ya que no tiene que explicar una configuración compleja a cada miembro del equipo y para cada proyecto. Además, parece menos propenso al error. – Xeoncross

2

Uso git submodule

Actualización:

La base de código estándar que tiene que ser una parte de todos los repositorios tiene que ser un repositorio git distinta separada.

git submodule add <repo_nick_name> <repo_path> 

agregarán ese repositorio a este. Al clonar y presionar, solo se presionarán/clonarán el archivo .gitmodules y el hash en el repositorio.

git submodule init 

y

git submodule update 

inicializa, respectivamente, y actualiza los repositorios submódulo remotas.

Para obtener información detallada, consulte el screencast de git community book documentation on git submodules y/o scot chacon en el mismo.

+0

El problema es que son proyectos en el mismo directorio base. – Xeoncross

+0

Eso no debería ser ningún problema. los submódulos existen en la misma carpeta que el módulo. –

2

Editar: Para tener dos directorios .git, cuando los inicie, habrá un trabajo extra. Cuando inicie, realice:

git --git-dir=.git1 --work-tree=. init 
git --git-dir=.git2 --work-tree=. init 

Ahora tiene dos git dir en el mismo directorio. No muy lindo En este punto, asegúrese de tener .git1 y .git2 en ambos .gitombres, ya que no se ignoran por defecto. Además, cada comando git que ejecute también debe tener el argumento --git-dir para especificar con qué repositorio está interactuando. Puede configurar alias para eso.

Dado que están en el mismo directorio base y los submódulos no funcionarán, puede poner archivos '.gitignore' dentro de ambos directorios '.git/info/exclude'. Poniéndolos en .git/info/exclude se asegura de que el otro repositorio no recoja las exclusiones.

Puede requerir cierto mantenimiento si los dos repos se diferencian por una granularidad más fina que las carpetas, pero si especifica en cada una.gitignore los archivos que pertenecen solo al OTRO repositorio, debería funcionar.

Ver: gitignore

+0

No puedes tener dos carpetas '.git'; simplemente las coloco allí para mostrar lo que * creo que quiero *. – Xeoncross

+0

Bueno, puedes, solo requiere un trabajo extra. Ver mi edición – bobDevil

+0

Crazy man. No creo que vaya por esta ruta, ya que parece un hack. Además, sería una molestia configurar un grupo de instalaciones de equipos como este. ¡Impresionante saber que funciona bien! – Xeoncross

Cuestiones relacionadas