Penso che questo articolo, A Successful Git Branching Model , sia molto noto tra gli utenti DVCS esperti.
Uso hg
principalmente, ma direi che questa discussione va bene per qualsiasi DVCS.
Il nostro flusso di lavoro attuale prevede che ogni sviluppatore cloni il repository principale. Scriviamo codice sul nostro repository locale, eseguiamo test e, se tutto va bene, spinge al master.
Quindi vogliamo configurare server CI come Jenkins e migliorare il nostro flusso di lavoro con il futuro sistema di provisioning (chef, burattino, ansible, ecc.).
Parte reale
Bene, il modello presentato sopra funziona bene ma i rami possono rompere CI. Il ramo delle caratteristiche dovrebbe sincronizzarsi con l'origine (secondo l'articolo, sarebbe il development
ramo) per rendere CI e l'unione fluidi, giusto?
Supponiamo che Alice e Bob stiano lavorando a due funzioni. Ma Alice ha finito il giorno successivo. La funzionalità di Bob richiede una settimana. Quando Bob ha terminato, le sue modifiche sono obsolete (forse Alice ha riformattato / rinominato alcune classi).
Una soluzione è ogni mattina che gli sviluppatori devono tirare master/origin
per verificare se ci sono cambiamenti. Se Alice si impegna, Bob dovrebbe estrarre e fondersi nel suo spazio di lavoro in modo che il suo ramo di funzionalità sia aggiornato.
- È un buon modo?
- Questi rami dovrebbero esistere nel repository principale (non clone locale?) Significato ogni sviluppatore dovrebbe avere il privilegio di eseguire il repository principale su GitHub / Bitbucket in modo da poter creare un nuovo ramo? O questo è fatto localmente?
- Infine, il modello presentato dall'articolo dovrebbe interrompere CI se i rami non sono sincronizzati con
origin/master
. Dal momento che vogliamo creare build notturne, gli sviluppatori dovrebbero estrarre e unire prima di lasciare il lavoro e avere anche CI in esecuzione su ciascun ramo delle funzionalità?