Christopher hizo un muy buen trabajo al enumerar las desventajas de un modelo de un proyecto por repositorio. Me gustaría discutir algunas de las razones por las que podría considerar un enfoque de repositorio múltiple. En muchos entornos en los que he trabajado, un enfoque de múltiples repositorios ha sido una solución razonable, pero la decisión de cuántos repositorios tener y dónde hacer los recortes no siempre ha sido fácil.
En mi posición actual, migré un gigantesco repositorio CVS de repositorio único con más de diez años de historia a varios repositorios git. Desde esa decisión inicial, el número de repositorios ha crecido (a través de las acciones de otros equipos), hasta el punto de sospechar que tenemos más de lo que sería óptimo. Algunos nuevos empleados han sugerido fusionar los repositorios, pero he argumentado en contra. El proyecto Wayland tiene una experiencia similar. En una charla que vi recientemente, tenían, en un momento, más de 200 repositorios de git, por lo cual el líder se disculpó. Mirando su sitio web , veo que ahora están en 5, lo que parece razonable. Es importante observar que unir y dividir repositorios es una tarea manejable, y está bien experimentar (dentro de lo razonable).
Entonces, ¿cuándo podrías querer múltiples repositorios?
- Un repositorio único sería demasiado grande para ser eficiente.
- Sus repositorios están débilmente acoplados o desacoplados.
- Un desarrollador generalmente solo necesita uno, o un pequeño subconjunto de sus repositorios para desarrollar.
- Por lo general, desea desarrollar los repositorios de forma independiente, y solo necesita sincronizarlos ocasionalmente.
- Desea fomentar más modularidad.
- Diferentes equipos trabajan en diferentes repositorios.
Los puntos 2 y 3 solo son significativos si el punto 1 se cumple. Al dividir nuestros repositorios, disminuí significativamente las demoras sufridas por nuestros colegas externos, reduje el consumo de disco y mejoré el tráfico de red.
4 y 5 son más sutiles. Cuando divide los repositorios de digamos un cliente y un servidor, esto hace que sea más costoso coordinar los cambios entre el código del cliente y el servidor. Esto puede ser positivo, ya que fomenta una interfaz desacoplada entre los dos.
Incluso con las desventajas de los proyectos de múltiples repositorios, se hace mucho trabajo respetable de esa manera: wayland y boost vienen a la mente. No creo que haya llegado a un consenso con respecto a las mejores prácticas, y se requiere cierto juicio. Las herramientas para trabajar con múltiples repositorios (git-subtree, git-submodule y otros) aún se están desarrollando y experimentando. Mi consejo es experimentar y ser pragmático.