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 masterfeature 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:

  1. Een develop branch wordt gemaakt van master
  2. Een release branch wordt gemaakt van develop

  3. Feature takken worden gemaakt van develop
  4. Wanneer een feature compleet is wordt het samengevoegd in de develop tak
  5. Wanneer de release tak klaar is wordt het samengevoegd in develop en master
  6. Als een issue in master wordt gedetecteerd wordt een hotfix branch aangemaakt van master
  7. Als de hotfix is voltooid wordt het samengevoegd naar zowel develop als master

Volgende, lees meer over de Forking Workflow of bezoek onze workflowvergelijkingspagina.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *