¿Cómo organizar aplicaciones relacionadas en git repo?

¿Cuál es el tree de decisiones para saber cuándo dividir un set de aplicaciones relacionadas y / o coherentes en git repo y / o sucursales? ¿Debo mantener cada aplicación en un repository? ¿O todas las aplicaciones y dependencies en un solo repository? O algo intermedio?

respuesta ¿Cómo debería organizar múltiples aplicaciones relacionadas usando git? afirma que un repository por proyecto es apropiado, pero no da pistas sobre lo que sería un proyecto.

Y luego está la cuestión de las comprobaciones de desarrollo, testing, testing de integración y producción cuando los repositorys de git están divididos. Responda cómo organiza sus lists de trabajo de progtwigción algunas opciones de twig / label, pero ignora los detalles de la aplicación múltiple.

¡También está el esquema DB! la definición incremental del esquema ayuda, pero de nuevo, ¿dónde se mantendría esta definición si la database abarca aplicaciones de services de background y aplicaciones para el usuario?

Algunos ejemplos que he estado reflexionando:

  1. una aplicación web front-end y su CGI / DB de back-end: ¿uno o dos?
  2. un set de back-ends web que usan funciones de otros back-ends
  3. un set de aplicaciones de front-end que comparten CSS y jquery plug-ins
  4. los scripts de selenium que testingn las características del front-end en el código dependiente, en el repository de la aplicación front-end o en el repo del código dependiente?

Si quiero trabajar en una sola aplicación, es difícil (bueno, tedioso y propenso a errores) consultar un directory de un repository, así que tengo que verificar todo el tree git (o al less clonar todo el tree), por lo que eso implica que git no está diseñado para mantener todas las aplicaciones y dependencies en un solo tree.

Pero si quiero mantener cada uno de los proyectos (aplicaciones, frameworks, dependencies, treees de documentos, CSS) en su propio repository, me encuentro buscando mi queue para la resolución de dependencia, es decir, no sé qué versión de cada uno la aplicación es compatible. Creo que las tags git son una buena forma de hacerlo, si solo pudiera moverlas a versiones más nuevas que mantengan la compatibilidad.

Cuando la aplicación se divide o se fusiona, como sucede a menudo con models de refactorización hasta models más básicos, ¿puedo pasar el historial de git de esos files a otro git? No veo cómo hacer esto, por lo que se inclina hacia un repository único para todo.

Si desarrollo una nueva function en todas las aplicaciones, sería bueno que las sucursales representen características.

Creo que quiero un repo de repo, ¿existe eso?

Se trata de utilizar un enfoque de componentes : un componente es un set coherente de files que tienen su propio historial (un set propio de twigs, tags y fusiones).
Debe include solo lo que no se puede generar (aunque el esquema db en algún momento se puede agregar al repository, como se ve en " ¿Cuál es el enfoque correcto para tratar con el file Rails db / schema.rb en GIT? ". Todavía puede generarlo sin embargo, como se muestra en " ¿Cuál es la forma preferida de administrar schema.rb en git? ", para evitar conflictos innecesarios )

Un componente puede evolucionar sin que otro tenga que evolucionar. Consulte " Estructuración de componentes relacionados en git ".
Ese es el criterio principal que le permite responder: "X e Y: ¿uno o dos repositorys?".
Puede dividir un repository en dos más adelante, pero tenga en count que cambiará su historial: el otro contribuidor deberá restablecer su propio repository a ese nuevo historial.

Puede agrupar los diferentes repos de componentes en uno con submodules, como se explica aquí (que es el "repository de repos", o, si desea tener solo un repository, en el subtree , como se ilustra aquí .