Wat zijn branching strategieën?

Een branching strategie is een bewuste aanpak en plan om verschillende versies van de code te beheren binnen een versiebeheersysteem zoals Git. Om de ontwikkeling gestructureerd en efficient te laten verlopen, bepaalt de strategie hoe en wanneer branches worden aangemaakt, samengevoegd en verwijderd.

Door een willekeurige opbouw kan je als ontwikkelaar snel het overzicht kwijt raken, merge-problemen creëren en andere kwaliteitsproblemen laten ontstaan, zeker als je samenwerkt binnen een team. Als laatste maakt het aanhouden van gestelde afspraken (conventies) het gemakkelijker om automatisering te implementeren.

Casus

Je werkt in een ontwikkelteam met meerdere developers. Binnen dit team wordt gebruik gemaakt van Git als versiebeheersysteem. Doordat meerdere ontwikkelaars tegelijk willen werken aan verschillende features wordt gebruik gemaakt van Git flow als branching strategie om orde te houden in de branching aanpak

Hoe zitten branching strategieën in elkaar?

Een branching strategie bestaat uit een set afspraken die bepalen hoe branches binnen een repository beheerd en gemaakt worden. De basisprincipes van een branching strategie zijn:

  • Een stabiele main branch: De main branch bevat altijd een stabiele en release-klare versie van de code.
  • Feature branches: Nieuwe functionaliteiten worden ontwikkeld in aparte feature branches die worden samengevoegd na een review (via een pull request).
  • Release en hotfix branches: Afhankelijk van de strategie kunnen extra branches worden gebruikt voor releases en dringende bugfixes.
  • Regels voor merges: Er wordt bepaald hoe en wanneer branches worden samengevoegd om conflicten te minimaliseren en kwaliteit te waarborgen.

Verder wordt er in een branching strategie gekeken hoe de kwaliteit wordt gewaarborgd. Daarnaast kan bepaald worden hoe deployment releases geïntegreerd worden:

  • Test releases: Vanaf feature of develop branches
  • Acceptatie releases: Vanaf “stable” (pre-release) branches
  • Production releases: Vanaf release branch

Hoe gebruik je branching strategieën?

Branching strategieën kunnen worden toegepast afhankelijk van de behoefte van de ontwikkelaar(s). Branching strategieën worden toegepast afhankelijk van de ontwikkelbehoeften:

  • Kleine teams en snelle releases GitHub Flow
  • Gestructureerde releases met meerdere ontwikkelaars GitFlow

Door een duidelijke strategie te hanteren, blijft de codebase overzichtelijk en worden fouten geminimaliseerd. Per project en team kan het verschillen welke strategie toegepast zal worden. Bekende branching strategieën om te gebruiken zijn Github Flow en Gitflow.

GitFlow

GitFlow is een uitgebreide strategie die meerdere branches introduceert voor gestructureerd ontwikkelwerk. GitFlow is opgebouwd via de volgende structuur:

  • Main branch: Bevat een stabiele versie van het project en wordt alleen bijgewerkt met releases.
  • Develop branches: Hierin wordt actieve ontwikkeling gedaan. Feature branches worden hieraan toegevoegd en samengevoegd.
  • Feature branches: Nieuwe functionaliteiten worden ontwikkeld in feature branches die afgetakt zijn van develop.
  • Release branches: Wanneer een nieuwe versie wordt voorbereid, wordt een release branch aangemaakt.
  • Hotfix branches: Kritieke bugs in productie worden direct opgelost in een aparte hotfix-branch en direct naar main gemerged.

Een voorbeeld van Gitflow is te zien in Figuur 1. Figuur 1: Voorbeeld gitflow

GitHub Flow

GitHub Flow is een eenvoudigere strategie die vaak gebruikt wordt in CI-CD omgevingen of kleinere teams die minder complexere projecten hebben. Deze flow bevat de volgende structuur:

  • Main branch: Bevat een stabiele versie van het project en wordt alleen bijgewerkt met releases.
  • Feature branch: Bevat wijzigingen die doorgevoerd moeten worden naar de main-branch.

Zodra een feature klaar is, wordt er via een pull request naar de main-branch de mogelijkheid gegeven om een code review te geven. Als deze pull request is goedgekeurd, dan kan deze branch worden gemerged met de main-branch en kan er direct gedeployed worden.

Een voorbeeld van GitHub flow is te zien in Figuur 2. Figuur 2: Voorbeeld van GitHub Flow

Bronnen

GitHub flow: https://docs.github.com/en/get-started/using-github/github-flow
Gitflow: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow


Volgende stap: Stappen branching strategieën