Penso che questo articolo, Un riuscito modello di Branca di Git , sia molto conosciuto tra utenti DVCS esperti.
Uso principalmente hg
, ma direi che questa discussione va bene per qualsiasi DVCS.
Il nostro attuale flusso di lavoro è che ogni sviluppatore clona il repository principale. Scriviamo codice sul nostro repository locale, eseguiamo test e, se tutto va bene, spingo al master.
Quindi vogliamo configurare server CI come Jenkins e migliorare il nostro flusso di lavoro con il futuro sistema di provisioning (chef, fantoccio, ansible, ecc.)
Parte reale
Bene, il modello qui sopra funziona bene ma i rami possono rompere l'IC. Il ramo della funzione dovrebbe sincronizzarsi con l'origine (secondo l'articolo, sarebbe development
branch) per rendere CI e fondersi liscio, giusto?
Dire che Alice e Bob stanno lavorando su due funzioni. Ma Alice è fatta il giorno dopo. La funzione di Bob dura una settimana. Quando Bob ha finito, le sue modifiche sono obsolete (forse Alice ha refactorato / 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 deve tirare e unirsi nel suo spazio di lavoro in modo che il suo ramo di funzionalità sia aggiornato.
- È un buon modo?
- Questi branch dovrebbero esistere nel master repo (non il clone locale?) Significato: ogni sviluppatore ha il privilegio di commit sul master repo su GitHub / Bitbucket in modo che possano creare un nuovo ramo? O questo è fatto localmente?
- Infine, il modello presentato dall'articolo dovrebbe interrompere l'IC se i rami non sono sincronizzati con
origin/master
. Dal momento che vogliamo fare build notturni, gli sviluppatori dovrebbero estrarli e unirli prima che lascino il lavoro, e anche l'IC venga eseguito su ciascun ramo di funzione?