Múltiples submodules con submodules

Antes que nada, permítanme decir que esta pregunta puede no encajar en SoftwareEngineering.SE, aunque es similar a una pregunta de "tablero blanco". Esta pregunta tiene que ver específicamente con Git, así que pensé que lo haría aquí en SO en su lugar. Esto es más una pregunta de "¿cómo lo hago?" O "¿qué debo preocuparme?". También tengo que hacer esta pregunta primero para no arruinar por completo uno o más de mis repositorys Git. .

De todos modos, tengo un repository de Git para una aplicación que estoy construyendo actualmente. Esta aplicación tiene varios submodules incluidos, uno para cada una de las bibliotecas de las que depende la aplicación. Ahora, algunos de mis submodules dependen el uno del otro. Por ejemplo, tengo algunas implementaciones diferentes en algunos submodules, que dependen de alguna interfaz específica en un submodule separado.

Estoy pensando en convertir la biblioteca de interfaz en un submodule de cada biblioteca de implementación … Bueno, por el bien de esta pregunta no tiene que ser una interfaz. Digamos que hay bibliotecas involucradas que tienen submodules propios . Ahora a la pregunta …

¿Qué sucede si en el futuro necesito admitir dos implementaciones diferentes en una nueva aplicación … ¿Qué sucede cuando incluyo ambas implementaciones como submodules en la aplicación? Especialmente … ¿Qué pasa si un submodule común se actualizó … Una implementación necesita V1.0 y otra implementación necesita V2.0? ¿Hay algún tipo de conflicto?

PD: Lo que estoy tratando de sacar de esta cuestión … Es una manera de tener mis submodules cada uno tiene una reference a un cierto compromiso # (para las bibliotecas de las que dependen) que necesitan para comstackr … Si esta no es la manera correcta, entonces estoy abierto a las alternativas.

Es una forma de tener mis submodules cada uno tiene una reference a un cierto commit # (para las bibliotecas de las que dependen) que necesitan para poder comstackr

Idealmente, esos submodules deberían tener submodules propios.
La naturaleza misma de un submodule (que detallo aquí ) es ser una reference SHA1 fija de un repository desprotegido.

El hecho de que el submodule A dependa de un repository común C, versión 1 y submodule B depende de C común, la versión 2 solo significa que A y B tienen C tiene un submodule, pero hace reference a dos versiones diferentes de C.

Sin embargo:

Creo que tendré que quedarme con los submodules hasta que este proyecto esté terminado. Si tuviera que save submodules de submodules, realmente no creo que eso funcione. No puedo tener varias instancias de un proyecto en mi solución … Entonces los proyectos no podían include sus propias versiones "personales" de las dependencies que necesitan .

En ese caso, debe tener una organización plana de submodules.
Eso significa: incluso aquellos submodules tienen un submodule propio, no los clones recursivamente. Solo clona los submodules del repository padre (aquí: A, B y C común, todos los submodules directos del repository principal del proyecto principal)

git submodule update --init 

Eso revisará esos submodules (sin inicializar / verificar los submodules de esos submodules)

Usted termina con un proyecto capaz de comstackr C, luego B y A, luego sí mismo (siempre que A y B usen la misma versión de C).