Christopher ha fatto un ottimo lavoro nell'enumerare gli svantaggi di un modello a progetto singolo per repository. Vorrei discutere alcuni dei motivi per cui potresti prendere in considerazione un approccio a più repository. In molti ambienti in cui ho lavorato, un approccio multi-repository è stato una soluzione ragionevole, ma la decisione di quanti repository avere e dove effettuare i tagli non è sempre stata facile da realizzare.
Nella mia attuale posizione, ho migrato un repository CVS a singolo repository con oltre dieci anni di storia in una serie di repository git. Da quella decisione iniziale, il numero di repository è cresciuto (attraverso le azioni di altre squadre), al punto che sospetto che abbiamo più di quanto sarebbe ottimale. Alcuni neoassunti hanno suggerito di fondere i repository ma ho discusso contro di esso. Il progetto Wayland ha un'esperienza simile. In un discorso che ho visto di recente, avevano, ad un certo punto, oltre 200 repository git, per i quali il responsabile si è scusato. Guardando il loro sito web , ora vedo che sono in 5, il che sembra ragionevole. È importante osservare che unire e dividere i repository è un compito gestibile ed è bene sperimentare (entro limiti ragionevoli).
Quindi, quando potresti volere più repository?
- Un singolo repository sarebbe troppo grande per essere efficiente.
- I tuoi repository sono liberamente accoppiati o disaccoppiati.
- Uno sviluppatore in genere ha bisogno solo di uno o di un piccolo sottoinsieme dei repository per svilupparlo.
- In genere si desidera sviluppare i repository in modo indipendente e è necessario sincronizzarli solo occasionalmente.
- Vuoi incoraggiare una maggiore modularità.
- Diversi team lavorano su diversi repository.
I punti 2 e 3 sono significativi solo se vale il punto 1. Dividendo i nostri repository, ho significativamente ridotto i ritardi subiti dai nostri colleghi fuori sede, ridotto il consumo del disco e migliorato il traffico di rete.
4 e 5 sono più sottili. Quando si dividono i repository di dire un client e un server, ciò rende più costoso coordinare le modifiche tra il codice client e il server. Questo può essere positivo, in quanto incoraggia un'interfaccia disaccoppiata tra i due.
Anche con i lati negativi dei progetti multi-repository, in questo modo viene svolto molto lavoro rispettabile: wayland e boost vengono in mente. Non credo che si sia ancora sviluppato un consenso in merito alle migliori pratiche e è necessario un certo giudizio. Gli strumenti per lavorare con più repository (git-subtree, git-submodule e altri) sono ancora in fase di sviluppo e sperimentazione. Il mio consiglio è di sperimentare ed essere pragmatico.