Git Flow - Un modello di branching che funziona
-
Upload
innoteam-srl -
Category
Technology
-
view
1.030 -
download
0
Transcript of Git Flow - Un modello di branching che funziona
![Page 1: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/1.jpg)
Un modello di branching per Git che funziona – 30/04/2013
Git Flow
PUG Marche
![Page 2: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/2.jpg)
2
Contenuti
•
•
•
•
Flusso completo
Branch principali
Branch di supporto
Esperienze, strumenti e riferimenti
![Page 3: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/3.jpg)
3
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
![Page 4: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/4.jpg)
4
Flusso di sviluppo e di hot fix
Feature br. Develop Release br. Master
Master Hot fix
Master
Develop
Sviluppo
Hot fix in produzione
![Page 5: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/5.jpg)
5
Pair programming e team per funzionalità
![Page 6: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/6.jpg)
6
Sintesi dei branch
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
![Page 7: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/7.jpg)
7
Contenuti
•
•
•
•
Flusso completo
Branch principali
Branch di supporto
Esperienze, strumenti e riferimenti
![Page 8: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/8.jpg)
8
I branch principali: master e develop
• 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
![Page 9: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/9.jpg)
9
Contenuti
•
•
•
•
Flusso completo
Branch principali
Branch di supporto
Esperienze, strumenti e riferimenti
![Page 10: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/10.jpg)
10
Branch delle feature
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
![Page 11: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/11.jpg)
11
Branch delle feature: comandi
Creare un nuovo branch per una feature:
$ git checkout -b myfeature developSwitched to a new branch "myfeature"
Incorporare un branch di una feature su develop:
$ git checkout developSwitched to branch 'develop'$ git merge --no-ff myfeatureUpdating ea1b82a..05e9557(Summary of changes)$ git branch -d myfeatureDeleted branch myfeature (was 05e9557).$ git push origin develop
Differenza con e senza fast forward:
![Page 12: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/12.jpg)
12
Branch delle release
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
![Page 13: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/13.jpg)
13
Branch delle release: comandi
Creare un nuovo branch per una release:
$ git checkout -b release-1.2 developSwitched to a new branch "release-1.2"$ ./bump-version.sh 1.2Files 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.21 files changed, 1 insertions(+), 1 deletions(-)
Concludere una release:
Merge su master e tag:
$ git checkout masterSwitched to branch 'master'$ git merge --no-ff release-1.2Merge made by recursive.(Summary of changes)$ git tag -a 1.2
Riportare le modifiche su develop:
$ git checkout developSwitched to branch 'develop'$ git merge --no-ff release-1.2Merge made by recursive.(Summary of changes)
Rimuovere la release:
$ git branch -d release-1.2Deleted branch release-1.2 (was ff452fe).
![Page 14: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/14.jpg)
14
Branch degli hot fix
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
![Page 15: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/15.jpg)
15
Branch degli hot fix: comandi
Creare un nuovo hot fix per effettuare il bug fixing:
$ git checkout -b hotfix-1.2.1 masterSwitched to a new branch "hotfix-1.2.1"$ ./bump-version.sh 1.2.1Files 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.11 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 problem5 files changed, 32 insertions(+), 17 deletions(-)
Concludere un hot fix:
Merge su master e tag:
$ git checkout masterSwitched to branch 'master'$ git merge --no-ff hotfix-1.2.1Merge made by recursive.(Summary of changes)$ git tag -a 1.2.1
Riportare il bug fix su develop:
$ git checkout developSwitched to branch 'develop'$ git merge --no-ff hotfix-1.2.1Merge made by recursive.(Summary of changes)
Rimuovere l’hot fix:
$ git branch -d hotfix-1.2.1Deleted branch hotfix-1.2.1 (was abbe5d6).
Eccezione: quando esiste già un branch di release, il merge delbug fix deve essere effettuato sul release branch e non su develop
![Page 16: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/16.jpg)
16
Contenuti
•
•
•
•
Flusso completo
Branch principali
Branch di supporto
Esperienze, strumenti e riferimenti
![Page 17: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/17.jpg)
17
Estensione git per operazioni git-flow ad alto livello
https://github.com/nvie/gitflow
Esempi:
git flow featuregit flow feature start <name> [<base>]git flow feature finish <name>
git flow releasegit flow release start <release> [<base>]git flow release finish <release>
git flow hotfixgit flow hotfix start <release> [<base>]git flow hotfix finish <release>
![Page 18: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/18.jpg)
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/
![Page 19: Git Flow - Un modello di branching che funziona](https://reader035.fdocumenti.com/reader035/viewer/2022062419/55903d761a28ab936a8b45af/html5/thumbnails/19.jpg)
19
Riferimenti
Articolo originale: http://nvie.com/posts/a-successful-git-branching-model/
Git-flow con rebase: http://ctoinsights.wordpress.com/2012/06/29/git-flow-with-rebase/