Sei sulla pagina 1di 6

Git flow

Introduzione
Git flow è un’estensione di git che offre comandi di alto livello sul repository basandosi sul modello
di branching di Vincent Driessen.
Definisce un modello di branching rigoroso che rispecchia le fasi di rilascio del progetto.
Come lavora

Il git flow come altri modelli usa un repository centrale usato come hub di comunicazione fra tutti
gli sviluppatori.
Ogni sviluppatore lavora sulla propria copia locale e pusha i branch sul repository centrale.

Il modello sopra descritto si compone di due branch principali:

 master
 develop

che definiscono la storia del progetto. Entrambi sono presenti sul repository remoto al fine di essere
condivisi con l’intero team.

Tutti gli sviluppi paralleli da parte dei team vengono gestiti tramite branch di supporto , in modo da
tenere traccia di nuove funzionalità, fix veloci, etc…
Abbiamo 3 tipi di branch di supporto:

 feature
 release
 hotfix

ognuno di questi ha uno scopo specifico e hanno regole rigide come ad esempio il ramo originario,
il ramo in cui vengono fusi, etc. I branch di supporto non necessariamente devono essere presenti
sul repository remoto se non per backup/collaborazione. La distinzione principale su quale branch
usare e sul modo in cui vengono usati.

Setup
Installazione

L’unico requisito è avere git già installato:

# OSx
$ brew install git-flow-avh
# Linux
$ apt-get install git-flow
# Windows
$ wget -q -O - --no-check-certificate
https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-
installer.sh install stable | bash

Inizializzazione
$ git flow init
Which branch should be used for bringing forth production releases?
- develop
- master
Branch name for production releases: [master]
Which branch should be used for integration of the "next release"?
- develop
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

Struttura dei branch


Branch principali

origin/master è il ramo principale in cui la HEAD riflette sempre lo stato della produzione, archivia
quindi la storia ufficiale del progetto.
origin/develop è il ramo principale in cui la HEAD riflette lo stato delle ultime modifiche di
sviluppo e serve da branch di integrazione per tutti le feature.
E buona norma usare i tag per tutti i commit sul branch master usando un sistema di versionamento
(per maggiori dettagli sul versionamento http://semver.org/lang/it/).

Feature

In generale sono usate per sviluppare nuove funzionalità per il medio-lungo periodo. La feature
esiste finchè c’è lo sviluppo, essendo un ramo a sè stante può venire mergiata oppure abbandonata.
Quando la feature è completa viene mergiata sul develop, le feature quindi non hanno mai
interazione diretta con il master.
Branch di origine: develop
Branch di fusione: develop
Branch naming: tutto ad esclusione di master, develop, release-*, hotfix-*

Release

Le release servono come supporto alla preparazione di una nuova release in produzione, inoltre
consentono la correzione di bug dell’ultimo minuto e la preparazione dei metadati per il rilascio
(numero di versione, date, etc).
Facendo queste operazioni su un ramo a parte, il ramo di sviluppo (develop) è libero di ricevere
nuovo codice per una futura release.

branch di origine: develop


branch di fusione: develop e master
branch naming: release-*

Hotfixes
I branch di maintenance (hotfix) sono usati per sviluppare patch sul codice di produzione.
E’ l’unico tipo di branch che forca direttamente dal branch master. Alla fine della fix mergia
direttamente su develop e master e il master viene taggato con un aggiornamento di numero di
versione.
Dal momento che ha una sua linea dedicata di sviluppo, può essere rilasciato velocemente senza
dover interrompere il flusso o aspettare una nuova release.

branch di origine: master


branch di fusione: master e develop
tag: incrementa il patch number
branch naming: hotfix-* o hotfix/*

Comandi principali
Feature

Iniziare una nuova feature

$ git flow feature start nome_feature

crea un nuovo branch basato sul develop e switcha sul branch stesso.
Terminare una nuova feature

$ git flow feature finish nome_feature

esegue le operazioni di:

 merge dell branch sul develop


 cancellazione del branch
 switch sul branch develop

Pubblicare una feature

$ git push origin feature/nome_feature


# oppure
$ git flow feature publish nome_feature

permette di pubblicare in remoto una feature in caso di sviluppo condiviso


Scaricare una feature pubblicata

$ git checkout feature/nome_feature


#oppure
$ git flow feature pull origin nome_feature

per scaricare una feature pubblicata da un altro utente.

Release

Iniziare una release

$ git flow release start nome_release[BASE]


crea un nuovo branch basato sul develop e switcha sul branch stesso.
C’è la possibilità di fornire un ulteriore parametro [BASE] che è l’sha-1 hash del commit dal quale
far partire la nuova release. Il commit deve essere sul branch develop.

Pubblicare una release

$ git push origin feature/nome_release


#oppure
$ git flow release publish nome_release

per pushare in remoto una feature in caso di sviluppo condiviso.


E’ buona norma pushare la release in modo da consentire anche da parte degli altri sviluppatori
l’invio di release.

Terminare una release

$ git flow feature finish nome_release

esegue le operazioni di:

 merge della release sul branch develop


 tag della release con il suo nome (oppure versioning)
 merge all’indietro sul branch develop
 rimozione della release

Push dei tag

$ git push --tags

Push in remoto dei tag creati.

Hotfixes

Iniziare una hotfix

$ git flow hotfix start version_number

crea un nuovo branch basato sul develop e switcha sul branch stesso.

Terminare una hotfix

$ git flow hotfix finish

merge della hotfix sul develop e sul master, il master viene taggato con la versione della hotfix

Push dei tag

$ git push --tags

Push in remoto dei tag creati.

Potrebbero piacerti anche