Close

Flusso di lavoro di Gitflow

Gitflow è un flusso di lavoro Git legacy che in origine ha rappresentato una strategia innovativa e dirompente di gestione dei branch Git. La popolarità di Gitflow è diminuita a favore dei flussi di lavoro basati su trunk, che ora sono considerati come best practice dello sviluppo continuo di software moderno, e delle pratiche DevOps. Inoltre, Gitflow può essere difficile da usare con CI/CD. Questo post descrive nei dettagli la storia di Gitflow.


Che cos'è Gitflow?


Gitflow è un modello di branching Git alternativo che prevede l'uso di feature branch e di più branch primari. È stato pubblicato per la prima volta e reso popolare da Vincent Driessen su nvie. Rispetto allo sviluppo basato su trunk, Gitflow ha numerosi branch di più lunga durata e commit di maggiori dimensioni. Con questo modello, gli sviluppatori creano un feature branch e ne posticipano il merge nel branch principale del trunk fino a quando la funzione non è completata. Questi feature branch di lunga durata richiedono una maggiore collaborazione per il merge e presentano un maggiore rischio di allontanarsi dal branch del trunk. Possono inoltre introdurre aggiornamenti in conflitto.

Gitflow può essere utilizzato per progetti con un ciclo di rilascio pianificato e per le best practice DevOps di continuous delivery. Questo flusso di lavoro non aggiunge nuovi concetti o comandi oltre a quanto richiesto per il flusso di lavoro del branch di funzioni. Assegna invece ruoli molto specifici ai diversi branch e definisce modi e tempi della loro interazione. Oltre ai branch feature, utilizza singoli branch per la preparazione, la gestione e la registrazione dei rilasci. Naturalmente, puoi sfruttare anche tutti i vantaggi del flusso di lavoro dei branch di funzioni: pull request, esperimenti isolati e collaborazione più efficiente.

Finestra della console
materiale correlato

Registro Git avanzato

Logo di Bitbucket
Scopri la soluzione

Impara a utilizzare Git con Bitbucket Cloud

Come funziona


Flusso di lavoro Git

Branch di sviluppo e branch principale

Invece di un singolo branch main, questo flusso di lavoro utilizza due branch per registrare la cronologia del progetto. Il branch main memorizza la cronologia di rilascio ufficiale e il branch develop funge da branch di integrazione per le funzioni. È inoltre molto pratico taggare tutti i commit nel branch main con un numero di versione.

Il primo passo consiste nell'integrare il branch main predefinito con un branch develop. Per procedere in modo semplice, uno sviluppatore deve creare un branch develop vuoto in locale ed eseguirne il push sul server:

git branch develop
git push -u origin develop

Questo branch conterrà la cronologia completa del progetto, mentre il branch main ne conterrà una versione ridotta. Gli altri sviluppatori devono ora clonare il repository centrale e creare un branch di traccia per il branch develop.

Quando si utilizza la libreria di estensioni git-flow, l'esecuzione di git flow init su un repository esistente creerà il branch develop:

$ git flow init


Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [main]
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? []


$ git branch
* develop
 main

Branch di funzioni


Passaggio 1. Creazione del repository

Ogni nuova funzione deve risiedere nel proprio branch, di cui può essere eseguito il push al repository centrale a fini di backup/collaborazione. Ma, invece di diramarsi dal branch main, i branch feature usano il branch develop come branch principale. Quando una funzione è completa, ne viene eseguito nuovamente il merge nel branch develop. Le funzioni non devono mai interagire direttamente con il branch main.

Flusso di lavoro di Git: branch di funzioni

Nota che i branch feature uniti con il branch develop costituiscono a tutti gli effetti il flusso di lavoro del branch di funzioni. Tuttavia, il flusso di lavoro di Gitflow non si ferma qui.

I branch feature vengono generalmente creati a partire dal branch develop più recente.

Creazione di un branch di funzioni

Senza le estensioni git-flow:

git checkout develop
git checkout -b feature_branch

Se si utilizza l'estensione git-flow:

git flow feature start feature_branch

Continua a lavorare utilizzando Git come faresti normalmente.

Completamento di un branch di funzioni

Quando hai terminato il lavoro di sviluppo della funzione, il passo successivo è quello di eseguire il merge di feature_branch in develop.

Senza le estensioni git-flow:

git checkout develop
git merge feature_branch

Con le estensioni git-flow:

git flow feature finish feature_branch

Branch di rilascio


Flusso di lavoro di Git: branch di rilascio

Una volta che develop ha acquisito un numero sufficiente di funzioni per effettuare un rilascio (o si sta avvicinando una data di rilascio prestabilita), esegui un fork di un branch release da develop. La creazione di questo branch avvia il ciclo di rilascio successivo, pertanto non è possibile aggiungere nuove funzioni dopo questo punto: devono essere inseriti in questo branch solo correzioni di bug, la creazione di documentazione e altri task orientati al rilascio. Quando è tutto pronto per il rilascio, viene eseguito il merge del branch release in main e il branch viene contrassegnato con un numero di versione. Inoltre, dovrebbe esserne eseguito nuovamente il merge in develop, che nel frattempo potrebbe essere avanzato dall'inizio del rilascio.

L'utilizzo di un branch dedicato per preparare i rilasci consente a un team di perfezionare il rilascio corrente mentre un altro team continua a lavorare sulle funzioni per il prossimo rilascio. Crea anche fasi di sviluppo ben definite (ad esempio, diventa facile programmare la preparazione alla versione 4.0 per la settimana in corso e vedere effettivamente tale versione nella struttura del repository).

Creare branch release è un'altra semplice operazione di creazione di branch. Come i branch feature, quelli release si basano sul branch develop. È possibile creare un nuovo branch release utilizzando i seguenti metodi.

Senza le estensioni git-flow:

git checkout develop
git checkout -b release/0.1.0

Se si utilizzano le estensioni git-flow:

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

Una volta che il rilascio è pronto, ne verrà eseguito il merge in main e develop, quindi il branch release verrà eliminato. È importante eseguire nuovamente il merge in develop perché potrebbero essere stati aggiunti aggiornamenti critici al branch release che devono essere accessibili alle nuove funzioni. Se la tua organizzazione dà molta importanza alla revisione del codice, questo è il luogo ideale per eseguire una pull request.

Per completare un branch release, utilizza i seguenti metodi:

Senza le estensioni git-flow:

git checkout main
git merge release/0.1.0

Oppure con l'estensione git-flow:

git flow release finish '0.1.0'

Branch di correzione rapida


Branch Hotfix all'interno del flusso di lavoro di Git

I branch di manutenzione, o "hotfix", vengono utilizzati per applicare rapidamente patch ai rilasci di produzione. I branch hotfix sono molto simili ai branch release e feature, tranne per il fatto che sono basati sul branch main anziché sul branch develop. Sono gli unici branch che dovrebbero eseguire un fork direttamente dal branch main. Non appena la correzione è completa, ne dovrebbe essere eseguito il merge sia in main che in develop (o nel branch release corrente) e al branch main dovrebbe essere aggiunto un tag con un numero di versione aggiornato.

Avere una linea di sviluppo dedicata per le correzioni dei bug consente al team di gestire i ticket senza interrompere il resto del flusso di lavoro o attendere il prossimo ciclo di rilascio. Puoi immaginare i branch di manutenzione come branch release ad hoc che funzionano direttamente con il branch main. È possibile creare un branch hotfix utilizzando i seguenti metodi:

Senza le estensioni git-flow:

git checkout main
git checkout -b hotfix_branch

Se si utilizzano le estensioni git-flow:

$ git flow hotfix start hotfix_branch

Come accade per il completamento di un branch release, viene eseguito il merge del branch hotfix sia nel branch main che nel branch develop.

git checkout main
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch

Esempio


Di seguito è riportato un esempio completo del flusso di un branch di funzioni in cui si parte dal presupposto che il repository sia stato configurato con un branch main.

git checkout main
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout main
git merge develop
git branch -d feature_branch

Oltre al flusso dei branch feature e release, un esempio del branch hotfix è il seguente:

git checkout main
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout main
git merge hotfix_branch

Riepilogo


Qui abbiamo parlato del flusso di lavoro di Gitflow. Gitflow è uno dei tanti stili di flussi di lavoro Git che tu e il tuo team potete utilizzare.

Alcuni concetti chiave da conoscere su Gitflow sono:

  • Questo flusso di lavoro è ottimo per un flusso di lavoro software basato sul rilascio.
  • Gitflow offre un canale dedicato per le correzioni rapide nell'ambiente di produzione.

Il flusso generale di Gitflow è:

1. Un branch develop viene creato a partire dal branch main

2. Un branch release viene creato a partire dal branch develop

3. I branch feature vengono creati a partire dal branch develop

4. Quando un branch feature è completo, ne viene eseguito il merge nel branch develop

5. Quando il branch release è completo, ne viene eseguito il merge nei branch develop e main

6. Se viene rilevato un problema nel branch main, viene creato un branch hotfix a partire dal branch main

7. Una volta completato il branch hotfix, ne viene eseguito il merge sia nel branch develop che nel branch main

Scopri di più sul flusso di lavoro di fork o visita la nostra pagina di confronto dei flussi di lavoro.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Le persone collaborano utilizzando una parete piena di strumenti

Blog di Bitbucket

Illustrazione su Devops

Percorso di apprendimento DevOps

Funzione Demo Den per demo con esperti Atlassian

Come Bitbucket Cloud funziona con Atlassian Open DevOps

Iscriviti alla nostra newsletter DevOps

Thank you for signing up