Dopo aver letto l’interessante presentazione “How GitHub uses GitHub to build GitHub“, ho deciso di dare un’occhiata al modello di workflow chiamato git-flow [che si basa, ovviamente, sull’utilizzo di git].
In sintesi:
- Ci sono due branch sempre presenti:
masteredevelop:mastercontiene tutti i commit per cui il repo è deployabile in produzione [production ready].developcontiene il codice di integrazione. Va da sé che una volta che il codice di integrazione è pronto, viene fatto un merge versomaster.
- Ci sono alcuni branch che vengono creati/distrutti all’occorrenza:
feature,releaseehotfix:featureè un branch didevelopche contiene, appunto, alcune features“locali” al brach di sviluppo di cui verrà fatto il merge versodeveloprelease: una volta che il branchdevelopha abbastanza features per una release, si crea un branch didevelopper prepararsi ad un ciclo di rilascio. Nessuna nuova feature può essere introdotta a partire da questo branch. Una volta pronto, il branchreleaseviene merge-ato al branchmaster[e successivamente al branchdevelop].hotfixcontiene, come dice il nome, delle fix urgenti che hanno origine nel branch di produzione, e di cui verrà fatto il merge nella prossima release di produzione [e che saranno riflesse, di conseguenza, anche indevelop].
Può sembrare complicato: ecco un grafico che spiega in forma grafica quello che ho illustrato a parole:

Se volete saperne di più, sul sito di dell’ideatore è presente una descrizione più dettagliata di git flow.
Bonus: su GitHub è presente un’estensione per utilizzare git-flow direttamente da git.
Esistono anche altri modelli di workflow per git, ma a mio avviso, git-flow rimane il più indicato [per i miei progetti].
Uso da ormai sei mesi questo di versioning e mi trovo molto bene. Confermo la bontà dell’approccio :)