La cosa meravigliosa di mercurial è che non esiste un modo obbligatorio di fare le cose, puoi fare in modo che il tuo flusso di lavoro segua ciò che è più conveniente per te.
Penso che un sistema minimo sia probabilmente un repository remoto e un repository di sviluppatori clonato da esso. Ma quante distribuzioni hai, quanti sviluppatori hai, quali sono le linee di responsabilità e quanto meglio puoi tenerle nel tuo flusso di lavoro potrebbe essere molto diverso per diversi team e / o progetti, anche all'interno dello stesso dipartimento, per non parlare della compagnia .
Ad esempio, usando l'esempio tratto da hinit che VonC ha pubblicato, se Bob ha trovato un bug nel codice che Rose ha mantenuto, potrebbe hgservire il suo repository, lei potrebbe inserire le sue modifiche, aggiornare il suo suggerimento, rintracciare il problema e spingere la correzione direttamente nel repository di Bobs (senza passare attraverso il server centrale) prima di eseguire l'aggiornamento al proprio ramo di lavoro. Quando Bob è stato contento del loro lavoro (ha confermato che i suoi test di integrazione sono stati eseguiti correttamente), ha potuto inviarlo al repository centrale, dove Joel poteva vedere che era completo.
Se ho capito bene, questo è in realtà più facile che con git dove Bob e Rose dovrebbero collaborare attraverso un repository nudo condiviso. Sospetto che Bob debba clonare il suo repository, lasciare che Rose estrae e spingere indietro verso quel repository, e quindi dovrebbe inserire le sue modifiche, piuttosto semplicemente aggiornando ad un nuovo changeset nel proprio repository.
Successivamente, Joel decide che questa condivisione ad hoc non è appropriata e che tutta la condivisione dovrebbe passare attraverso il repository centrale, ma non vuole che il capo del repository centrale sia mai in uno stato in cui non lo è superare i test di integrazione.
Per risolvere questo problema, Bob ha potuto creare un repository di staging. Qualsiasi repository spinto nell'area di staging avrebbe i test di integrazione eseguiti dal server di integrazione build / continuous e se i test hanno esito positivo, il changeset viene inviato al repository centrale. In caso contrario, il changeset verrà trattenuto fino a quando i test non avranno successo. Se solo il server di integrazione può inviare al repository centrale, Joel ottiene ciò che vuole: Bob e Rose possono collaborare spingendo e spostando l'area di staging, ma il repository centrale avrà sempre una build pulita e testata.
Quindi, in sintesi, il mondo è davvero la tua ostrica.
Gli scenari sopra riportati sono solo due dei numerosi problemi che potresti voler risolvere attraverso il tuo flusso di lavoro. La cosa migliore da fare è chiedere se si dispone di un problema specifico del flusso di lavoro che si desidera risolvere, quindi le persone possono offrire suggerimenti. Fino ad allora, probabilmente vale la pena limitarsi a mantenerlo semplice.