Top Banner
Un modello di branching per Git che funziona – 30/04/2013 Git Flow PUG Marche
19

Git Flow - Un modello di branching che funziona

Jun 29, 2015

Download

Technology

Innoteam Srl
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Git Flow - Un modello di branching che funziona

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

2

Contenuti

Flusso completo

Branch principali

Branch di supporto

Esperienze, strumenti e riferimenti

Page 3: Git Flow - Un modello di branching che funziona

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

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

5

Pair programming e team per funzionalità

Page 6: Git Flow - Un modello di branching che funziona

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

7

Contenuti

Flusso completo

Branch principali

Branch di supporto

Esperienze, strumenti e riferimenti

Page 8: Git Flow - Un modello di branching che funziona

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

9

Contenuti

Flusso completo

Branch principali

Branch di supporto

Esperienze, strumenti e riferimenti

Page 10: Git Flow - Un modello di branching che funziona

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

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

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

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

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

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

16

Contenuti

Flusso completo

Branch principali

Branch di supporto

Esperienze, strumenti e riferimenti

Page 17: Git Flow - Un modello di branching che funziona

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

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

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/