¿Puedo organizar los submodules de Git en una jerarquía plana?

Hola chicos,

Actualmente estoy trabajando en un proyecto .NET y varias bibliotecas .NET que tienen las siguientes interdependencies (versión simplificada):

Core (biblioteca) : sin dependencies

Pruebas (biblioteca) : dependencies al núcleo

Serialización (biblioteca) : dependencies al núcleo, testings

Solución de cliente : dependencies a Core, Testing, Serialization

Mi objective es mover la mayor cantidad posible de código a las bibliotecas para poder reutilizarlos en diferentes soluciones de clientes.

Actualmente, todos estos proyectos diferentes son parte de un único repository de Git. Residen en la siguiente estructura de directory:

src Core Testing Serialization Client 

es decir, cada proyecto reside junto a todos los demás proyectos dentro de la carpeta src , formando una jerarquía plana.

Quiero dividir estos proyectos en varios repositorys para que se puedan trabajar de forma independiente (especialmente debido a presionar a GitHub y mantener un historial limpio). Por lo tanto, leí acerca de los submodules de Git para organizarlos.

Mi verdadera pregunta es: ¿puedo usar los submodules de Git y mantener una jerarquía plana de directorys?

Hasta donde yo entiendo el text, un submodule se convierte en un subdirectory en el repository padre que se trata como un repository independiente. Por lo tanto, si presento los tres submodules para Serialización, Prueba y Núcleo, y dos de estos submodules tienen submodules por sí solos (es decir, depende de Núcleo), terminaría con algo como esto:

 src Core Testing Core Serialization Core Testing Client 

¿Existe la posibilidad de conservar la estructura de directory plana? ¿Los submodules de Git son lo correcto que estoy buscando? ¿O debería ir a diferentes repositorys de Git para Core, Testing, Serialization y Client y organizarlos en un repository padre de Git (que agregaría otro repo solo para oranizar a los demás)? ¿Es Git Subtree una opción viable?

Mis objectives generales son:

  • Trabaja sin problemas en el código de cliente y biblioteca que realmente reside en diferentes repositorys dentro de una solución.
  • Empuje las bibliotecas a GitHub pero conserve el código del cliente en la fuente cerrada.
  • Proporcione una compilation y una implementación sencillas para las soluciones del cliente, es decir, solo necesita clonar (recursivamente) el repository (correcto), crear el código y todo lo que se ejecuta (cliente, services, testings automatizadas).

Gracias si has estado leyendo todo este text. Y muchas gracias de antemano si puedes responder esta pregunta.

¿Los submodules de Git son lo correcto que estoy buscando?

Si desea "Trabajar sin problemas en el código del cliente y de la biblioteca que realmente reside en diferentes repositorys dentro de una solución", es posible que los submodules no sean el path a seguir.

Además, "Proporcionar una compilation e implementación sencilla para las soluciones de los clientes, es decir, solo necesita clonar (recursivamente) el repository (correcto), crear el código y todo lo que se ejecuta" es realizable, pero requerirá cierta disciplina.

Los submodules son una buena forma de include un compromiso particular de otro repository, proporcionando estabilidad y aislamiento del desarrollo. En git, un submodule es una cabeza separada, por lo que si planeas hacer cambios frecuentes, deberás asegurarte de que siempre verificas una twig. Hay algunas peculiaridades para ellos que requerirán un set de alias de git y una disciplina de progtwigdor para evitar grandes errores y frustraciones.

Para una revisión de los inconvenientes de los submodules en algunos casos (y forms de dispararse en el pie), consulte http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/ https : //codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/

Para aplicaciones similares, utilizo giternal ( https://github.com/patmaddox/giternal ) para include dependencies que sé que a veces me comprometo. (Vea esta publicación en el blog para una breve introducción: http://www.rubyinside.com/giternal-easy-git-external-dependency-management-1322.html )

Me encontré con un problema similar (que extrañamente no parece ser común). Otra herramienta que quizás desee considerar es el repository de Google. Puede usar esta herramienta para reproducir la estructura plana que necesita a través de un file de configuration. Algunos de los pros y contras están cubiertos en el segundo enlace proporcionado por la respuesta anterior.

Mi problema central con esta solución es que cada script necesita un repository de git simple. Idealmente, le gustaría que el script para reproducir su estructura de directory resida en el repository de nivel superior, pero a partir de este momento, esa funcionalidad no está disponible.