¿Flujo de trabajo de Git para subproyectos?

Tenemos un proyecto personalizado "kickstart"

Este kickstart puede tener modules agregados con bastante facilidad.

Cuando construimos estos modules, los construimos todos en base a una copy maestra limpia del kickstart que está controlado por la versión.

Cuando comenzamos un proyecto, creamos un repository vacío, configuramos el repository kickstart como control remoto, Pull from the remote. Cuando hay una actualización del núcleo volvemos a pasar desde el control remoto.

Esto funciona bien

Pero tenemos los modules que mencioné, los construimos todos en el kickstart limpio como un nuevo proyecto.

Queremos controlar la versión de todos estos modules.

Los files para los modules residen en realidad dentro de la plantilla.

Nuestro flujo de trabajo se parece a esto

/site 1 /kickstart /module1 /module1 files /module2 /module2 files /site 1 specific file /site 1 specific file /site2 /kickstart /modification of kickstart file for site2 only (eg config.php) /module2 /module2 files /module3 /module3 files /site 2 specific file /site 2 specific file /site3 /kickstart /modification of kickstart file for site3 only (eg config.php) /module1 /module1 files /module3 /module3 files /site 3 specific file /site 3 specific file 

Entonces, los Sitios 1,2 y 3 son sus propios repositorys git.

Todos contienen kickstart, que es un repository git

Algunos de ellos comparten modules.

Ahora no avanzamos aguas arriba de estos, si decidimos que algo funciona bien mientras lo hacemos en el sitio 1, comprobaremos la copy limpia de kickstart y realizaremos los cambios allí y luego serán networkingucidos a todos los sitios diferentes. Lo mismo con los modules.

Pero mi pregunta básica es, ¿dónde ponemos los modules? Dependen de que el kickstart esté allí.

Una idea era tenerlos como twigs de kickstart, también he oído hablar de submodules y subtreees, pero no sé cómo funcionan.

¿Cuál sería la mejor forma de estructurar este flujo de trabajo?

Poner esos tres sitios en su propio repository de Git (en lugar de usar un repository con tres sucursales), significa que no tiene que hacer mucho (si es que lo hace) se fusiona entre el sitio1, 2 y 3: los 3 tienen solo un control remoto: el kickstart .

En cuanto a la gestión de modules, cada module debe estar en su propio repository para poder usar fácilmente submodules o subtreees:

  • los submodules es una forma de get cada module de forma individual, con su historial completo, en su propio directory, lo que permite incluso retroceder a cada repository de modules.
  • el subtree viene en dos forms: la estrategia de fusión del subtree de 2007 (explicado aquí ) y el command de subtree reciente (1.7.11+) .
    La estrategia de fusión de subtreees (ver también aquí ) me haría más adecuada para fusionar uno de los repositorys de modules en un subdirectory ( modulex ). Como no necesita retroceder, podría ser su solución.