tl; dr - Sembra che sia ora di passare ai campionati più importanti. Mettere il rossetto su un maiale non lo rende più carino, a meno che non ti piaccia quel genere di cose ...
Il problema delle persone
Il primo problema è la sincronizzazione del commit. SE hai più persone che lavorano allo stesso codice contemporaneamente, devi solo una regola per prevenire problemi:
Rule 1: Always pull before you merge/rebase
Quando si tratta di DVCS, è difficile apportare modifiche a un ramo remoto (ovvero il repository principale) e molto facile apportare modifiche al locale. Ogni persona è responsabile di far sì che le proprie aggiunte di codice si adattino al tutto senza problemi. A meno che 2 persone non si impegnino nello stesso momento, non dovresti provare. L'accesso commit all'origine / master remoto dovrebbe essere limitato a pochi sviluppatori e dovrebbero estrarre le modifiche dagli altri sviluppatori tramite filiali di tracciamento remote.
Il problema del codice
Come fai a sapere che le modifiche apportate non infrangono il codice?
Risposta semplice ... Scrivi dei test per provare che non lo fanno. Se si ignora la scuola di pensiero TDD (Test Driven Design), l'intero punto dei test è aggiungere un livello di verifica che consenta di modificare il codice senza romperlo.
Rule 2: Don't make assumptions, write proofs (ie tests).
Inoltre, è necessario eseguire l'intera gamma di test prima di passare al master origine / remoto.
Mantieni i tuoi impegni il più piccolo e conciso possibile. In questo modo, se è necessario annullare una modifica che ha interrotto qualcosa in seguito, si eviterà di dover implementare nuovamente le parti che non hanno violato il codice.
Per prima cosa potresti aver bisogno di qualche ristrutturazione organizzativa
Se le soluzioni di cui sopra non possono essere facilmente applicate, probabilmente ci sono alcuni problemi con la struttura di sviluppo che devono essere affrontati per primi.
Il proprietario del progetto dovrebbe essere il gatekeeper. Se ci sono problemi di sincronizzazione del commit, probabilmente ci sono troppe persone con accesso commit. Anche su grandi progetti come il kernel Linux, solo una manciata di sviluppatori ha eseguito l'accesso al repository principale di origine / remoto. Esistono in realtà più livelli di repository per gestire i commit. Invece di un modello di commit a livello singolo in cui tutti stanno spingendo le loro modifiche all'origine, il modello gerarchico ha gatekeeper che effettuano modifiche e ne verificano la qualità prima dell'inclusione nel progetto. Il modello gerarchico di commit può ridimensionare molto più grande ed efficace del modello a singolo strato senza sacrificare la qualità.
Per gli sviluppatori che non vengono commettono l'accesso, si dovrebbe imparare a creare il proprio remoti rami di tracciamento (git e Gitorious sono buone per questo) in modo gli sviluppatori che fanno abbia l'accesso commit può facilmente tirare / integrate rami l'origine. Se le modifiche sono piccole, le patch funzioneranno altrettanto bene.
La capacità di estrarre le modifiche prima di eseguire l'unione / rebase presuppone che non si stia sviluppando nel ramo master locale. Il modo più semplice per gestirlo è effettuare un pull iniziale prima di iniziare a programmare, quindi fare tutto il lavoro su quel ramo. Il modo più difficile è ramificarlo appena prima di unire e ripristinare il master.
Definisci lo stile di codifica per il progetto in generale e fai in modo che gli sviluppatori lo seguano. Gli sviluppatori che contribuiscono dovrebbero scrivere un codice conforme agli standard / norme del progetto per ridurre al minimo la pulizia. Lo stile di programmazione può essere una grande barriera dell'ego in un progetto aperto. Se non viene impostato nessuno standard, ognuno codificherà nel proprio stile preferito e la base di codice diventerà molto brutta molto velocemente.
Il mito di "The Mythical Man Month"
Che ci crediate o no, i progetti open source più grandi / di maggior successo non sono gestiti come una democrazia. Sono gestiti come una gerarchia. Dichiarare che un progetto non può crescere efficacemente oltre gli 8-10 sviluppatori è ingenuo. Se ciò fosse vero, non esisterebbero mega-progetti come il kernel Linux. Il problema più profondo è che dare a tutti l'accesso al commit rende la comunicazione efficace troppo difficile da gestire.
Il problema del mese dell'uomo mitico può effettivamente essere superato. Hai solo bisogno di gestire il tuo progetto come i militari. Ci sono molti livelli all'interno della gerarchia perché è risaputo che le singole persone sono davvero efficaci solo nel gestire le comunicazioni con una manciata di persone. Finché nessun singolo individuo è responsabile della gestione del lavoro di più di 5-7 persone, il sistema può ridimensionarsi indefinitamente.
Potrebbe limitare gli sviluppatori più esperti a fare maggiore integrazione e progettazione / pianificazione di livello superiore, ma non è una cosa negativa. Parte del ridimensionamento consiste nel decidere se il progetto necessita di un piano a lungo termine. Le persone ai massimi livelli che hanno i maggiori investimenti (il tempo è anche una risorsa) per i progetti futuri dovrebbero essere incaricate di prendere le grandi decisioni.
È bello sapere di un progetto open source che sta attraversando dolori crescenti. Complimenti e buona fortuna.