Gitflow Workflow is een Git workflow die helpt bij continue software ontwikkeling en het implementeren van DevOps praktijken. Het werd voor het eerst gepubliceerd en populair gemaakt door Vincent Driessen bij nvie. De Gitflow Workflow definieert een strikt branching model ontworpen rond de project release. Dit biedt een robuust raamwerk voor het beheer van grotere projecten.
Gitflow is bij uitstek geschikt voor projecten die een geplande releasecyclus hebben en voor de DevOps best practice van continuous delivery. Deze workflow voegt geen nieuwe concepten of commando’s toe buiten wat nodig is voor de Feature Branch Workflow. In plaats daarvan wijst het zeer specifieke rollen toe aan verschillende branches en definieert hoe en wanneer ze moeten samenwerken. Naast feature
branches, gebruikt het individuele branches voor het voorbereiden, onderhouden en vastleggen van releases. Natuurlijk kun je ook gebruik maken van alle voordelen van de Feature Branch Workflow: pull requests, geïsoleerde experimenten, en efficiëntere samenwerking.
Aan de slag
Gitflow is eigenlijk gewoon een abstract idee van een Git workflow. Dit betekent dat het dicteert wat voor branches je moet opzetten en hoe je ze samenvoegt. We zullen de doelen van de branches hieronder bespreken. De git-flow toolset is een echt commandoregel gereedschap dat een installatieproces heeft. Het installatieproces voor git-flow is rechttoe rechtaan. Pakketten voor git-flow zijn beschikbaar op meerdere besturingssystemen. Op OSX systemen kun je brew install git-flow
uitvoeren. Op windows zul je git-flow moeten downloaden en installeren. Na de installatie van git-flow kan je het in je project gebruiken door git flow init
uit te voeren. Git-flow is een wrapper rond Git. Het git flow init
commando is een uitbreiding op het standaard git init
commando en verandert niets in je repository, behalve dat het branches voor je aanmaakt.
Hoe het werkt
Ontwikkel en Hoofdbranches
In plaats van een enkele master
tak, gebruikt deze werkstroom twee takken om de geschiedenis van het project vast te leggen. De master
branch slaat de officiële release geschiedenis op, en de develop
branch dient als een integratie branch voor features. Het is ook handig om alle commits in de master
branch te taggen met een versienummer.
De eerste stap is om de standaard master
aan te vullen met een develop
branch. Een eenvoudige manier om dit te doen is dat een ontwikkelaar lokaal een lege develop
branch aanmaakt en deze naar de server pusht:
git branch develop
git push -u origin develop
Deze branch zal de complete geschiedenis van het project bevatten, terwijl master
een verkorte versie zal bevatten. Andere ontwikkelaars moeten nu de centrale repository clonen en een volg branch aanmaken voor develop.
Bij gebruik van de git-flow extension library, zal het uitvoeren van git flow init
op een bestaande repo de develop
branch aanmaken:
$ 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:
Branch name for "next release" development:
How to name your supporting branch prefixes?
Feature branches?
Release branches?
Hotfix branches?
Support branches?
Version tag prefix?
$ git branch
* develop
master
Feature Branches
Elke nieuwe feature zou in zijn eigen branch moeten zitten, die naar het centrale repository gepushed kan worden voor backup/collaboratie. Maar, in plaats van aftakken van master
feature
takken gebruiken develop
als hun ouder tak. Als een eigenschap compleet is, wordt het teruggemerged in develop. Features zouden nooit direct moeten communiceren met master
.
Noteer dat feature
branches gecombineerd met de develop
branch, voor alle intenties en doeleinden, de Feature Branch Workflow is. Maar, de Gitflow Workflow stopt daar niet.
Feature
branches worden over het algemeen gemaakt van de laatste develop
branch.
Een feature branch maken
Zonder de git-flow extensies:
git checkout develop
git checkout -b feature_branch
Bij gebruik van de git-flow extensie:
git flow feature start feature_branch
Doorgaan met je werk en Git gebruiken zoals je normaal zou doen.
Een feature branch afmaken
Als je klaar bent met het ontwikkelwerk aan de feature, is de volgende stap om de feature_branch
samen te voegen in develop
.
Zonder de git-flow extensies:
git checkout develop
git merge feature_branch
Met de git-flow extensies:
git flow feature finish feature_branch
Release Branches
Zodra develop
genoeg features heeft verworven voor een release (of een vooraf bepaalde release datum nadert), fork je een release
branch af van develop
. Het aanmaken van deze branch start de volgende release cyclus, dus er kunnen geen nieuwe functies toegevoegd worden na dit punt-alleen bug fixes, documentatie generatie, en andere release-georiënteerde taken zouden in deze branch moeten gaan. Zodra het klaar is om te verschepen, wordt de release
branch samengevoegd in master
en getagged met een versienummer. Bovendien zou het terug moeten worden samengevoegd in develop
, die vooruitgang kan hebben geboekt sinds de release werd gestart.
Het gebruik van een eigen branch om releases voor te bereiden maakt het mogelijk voor één team om de huidige release op te poetsen terwijl een ander team verder werkt aan features voor de volgende release. Het creëert ook duidelijk gedefinieerde fasen van ontwikkeling (bijvoorbeeld, het is makkelijk om te zeggen, “Deze week bereiden we versie 4.0 voor,” en dat ook daadwerkelijk te zien in de structuur van het archief).
Het maken van release
takken is een andere eenvoudige branch operatie. Net als feature
takken, zijn release
takken gebaseerd op de develop
tak. Een nieuwe release
tak kan worden gemaakt met de volgende methoden.
Zonder de git-flow extensies:
git checkout develop
git checkout -b release/0.1.0
Bij gebruik van de git-flow extensies:
$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'
Als de release klaar is voor verzending, wordt deze samengevoegd in master
en develop
, daarna wordt de release
branch verwijderd. Het is belangrijk om terug samen te voegen in develop
omdat kritieke updates kunnen toegevoegd zijn aan de release
branch en ze moeten toegankelijk zijn voor nieuwe functies. Als uw organisatie code review benadrukt, zou dit een ideale plaats zijn voor een pull request.
Om een release
branch af te maken, gebruik je de volgende methoden:
Zonder de git-flow extensies:
git checkout master
git merge release/0.1.0
Of met de git-flow extensie:
git flow release finish '0.1.0'
Hotfix Branches
Maintenance of "hotfix”
branches worden gebruikt om snel productiereleases te patchen. Hotfix
branches lijken veel op release
branches en feature
branches behalve dat ze gebaseerd zijn op master
in plaats van develop
. Dit is de enige branch die direct van master
zou moeten forken. Zodra de reparatie voltooid is, zou het samengevoegd moeten worden in zowel master
als develop
(of de huidige release
branch), en master
zou moeten worden getagged met een bijgewerkt versienummer.
Een speciale ontwikkelstraat voor bug fixes geeft je team de mogelijkheid om problemen aan te pakken zonder de rest van de workflow te onderbreken of te wachten op de volgende release cyclus. Je kunt onderhoudstakken zien als ad hoc release
takken die direct werken met master
. Een hotfix
branch kan op de volgende manieren worden gemaakt:
Zonder de git-flow extensies:
git checkout master
git checkout -b hotfix_branch
Bij gebruik van de git-flow extensies:
$ git flow hotfix start hotfix_branch
Gelijk aan het afwerken van een release
branch, wordt een hotfix
branch samengevoegd in zowel master
als develop.
git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch
git branch -D hotfix_branch
$ git flow hotfix finish hotfix_branch
Voorbeeld
Een compleet voorbeeld van het demonstreren van een Feature Branch Flow is als volgt. Veronderstel dat we een repo setup hebben met een master
branch.
git checkout master
git checkout -b develop
git checkout -b feature_branch
# work happens on feature branch
git checkout develop
git merge feature_branch
git checkout master
git merge develop
git branch -d feature_branch
Naast de feature
en release
flow, ziet een hotfix
voorbeeld er als volgt uit:
git checkout master
git checkout -b hotfix_branch
# work is done commits are added to the hotfix_branch
git checkout develop
git merge hotfix_branch
git checkout master
git merge hotfix_branch
Samenvatting
Hier hebben we de Gitflow Workflow besproken. Gitflow is een van de vele stijlen van Git workflows die jij en je team kunnen gebruiken.
Enige belangrijke dingen die je moet weten over Gitflow zijn:
- De workflow is geweldig voor een release-gebaseerde software workflow.
- Gitflow biedt een speciaal kanaal voor hotfixes naar productie.
De algehele flow van Gitflow is:
- Een
develop
branch wordt gemaakt vanmaster
-
Feature
takken worden gemaakt vandevelop
- Wanneer een
feature
compleet is wordt het samengevoegd in dedevelop
tak - Wanneer de
release
tak klaar is wordt het samengevoegd indevelop
enmaster
- Als een issue in
master
wordt gedetecteerd wordt eenhotfix
branch aangemaakt vanmaster
- Als de
hotfix
is voltooid wordt het samengevoegd naar zoweldevelop
alsmaster
Een release
branch wordt gemaakt van develop
Volgende, lees meer over de Forking Workflow of bezoek onze workflowvergelijkingspagina.