3. 2
Il modello di git-flow
E’ una strategia di branching e release
management
Idoneo per sviluppo concorrente di più
feature
Supporta lo sviluppo in pair programming
Idoneo per la continuous integration
E’ ottimo per il continuous deployment e
consente di applicare velocemente bug fix
(“hot fix”)
Caratteristiche e benefici
4. Flusso di sviluppo e di hot fix
3
Feature br. Develop Release br. Master
Master Hot fix
Master
Develop
Sviluppo
Hot fix in produzione
6. Sintesi dei branch
5
Master: produzione
Develop: integrazione
Hotfixes: applicazione di bug fix in
produzione
Release: release candidate
Feature branches: branch dedicati
agli sviluppi di singole feature
Elenco dei branch
8. I branch principali: master e develop
7
• origin e master non vengono mai
eliminati: esistono in qualsiasi momento
del progetto
• Gli altri branch sono solo temporanei
• origin/master è il branch principale per il
codice production-ready
• origin/develop è il branch principale per
gli sviluppi (è anche il branch di
riferimento per la continuous integration)
• Quando il codice in develop è stabile a
sufficienza viene effettuato il merge su
master e viene impostato il tag della
release
Descrizione e flusso di base
10. Branch delle feature
9
Utilizzato per sviluppi a breve o lungo
termine.
Ci possono essere più feature branch in
parallelo.
Il branch può partire da develop e viene
effettuato il merge di ritorno sempre su
develop
Può essere chiamato con qualsiasi nome
diverso da master, develop, release-* o
hotfix-*
Esiste tipicamente solo nel repository dello
sviluppatore
Descrizione e flusso
11. Branch delle feature: comandi
10
Creare un nuovo branch per una feature:
$ git checkout -b myfeature develop
Switched to a new branch "myfeature"
Incorporare un branch di una feature su develop:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
Differenza con e senza fast forward:
12. Branch delle release
11
Supportano la preparazione del codice per il
rilascio in produzione
A questo punto, tutte le feature che sono
considerate pronte per il rilascio devono
essere già state riportate su develop
Il branch può partire da develop e viene
effettuato il merge di ritorno sempre su
master e develop
Convenzione di naming: release-*
Descrizione e flusso
13. Branch delle release: comandi
12
Creare un nuovo branch per una release:
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
Concludere una release:
Merge su master e tag:
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
Riportare le modifiche su develop:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
Rimuovere la release:
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
14. Branch degli hot fix
13
Serve per correggere bug fix critici in
produzione senza attendere che il ramo
develop sia pronto per il rilascio.
Il branch può partire da master e viene
effettuato il merge di ritorno sempre su
master e develop
Convenzione di naming: hotfix-*
Descrizione e flusso
15. Branch degli hot fix: comandi
14
Creare un nuovo hot fix per effettuare il bug fixing:
$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)
Merge su master dopo avere effettuato il bug fix:
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production problem
5 files changed, 32 insertions(+), 17 deletions(-)
Concludere un hot fix:
Merge su master e tag:
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1
Riportare il bug fix su develop:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
Rimuovere l’hot fix:
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
Eccezione: quando esiste già un branch di release, il merge del
bug fix deve essere effettuato sul release branch e non su develop
18. Supporto git-flow di Source Tree (frontend per Mac e Windows)
http://blog.sourcetreeapp.com/2012/08/01/smart-branching-with-sourcetree-and-git-flow/
17