Release Branch — is een tak in Git Flow die wordt aangemaakt vanuit develop om een specifieke release voor te bereiden. Hierin wordt de versie van de applicatie vastgelegd, worden laatste bugs opgelost en metadata bijgewerkt — zonder nieuwe functies toe te voegen. Volgens Vincent Driessen, 2010, scheidt de release-tak de voorbereiding van de release van de huidige ontwikkeling, waardoor beide activiteiten parallel kunnen worden uitgevoerd.
Belangrijkste punten
release/X.Y.Z volgens de applicatieversie.Release Branch (release-tak) — is een tijdelijke tak in Git Flow, aangemaakt vanuit develop wanneer het team besluit dat de huidige set functies klaar is voor release. Het bestaat precies zolang als de uiteindelijke release-voorbereiding duurt — van een paar uur tot een paar dagen.
Het belangrijkste doel van de release-tak is om een specifieke set functies voor de release te bevriezen, zonder de ontwikkeling van volgende versies te stoppen. Terwijl de release-tak wordt voorbereid, kunnen andere ontwikkelaars doorgaan met het mergen van feature-takken in develop voor de volgende release.
In de release-tak worden geen nieuwe functies gemaakt — alleen bugfixes, update van de applicatieversie, lokalisatie en documentatie. Na voltooiing van alle werkzaamheden wordt de release-tak samengevoegd in main (gemarkeerd als release) en terug in develop (zodat bugfixes in toekomstige versies terechtkomen).
Volgens Atlassian, 2024, zijn release-takken van cruciaal belang voor projecten met regelmatige releasecycli — ze zorgen voor voorspelbaarheid en stabiliteit van het releaseproces.
Levenscyclus van de release-tak, van aanmaak tot verwijdering, omvat verschillende fasen. Inzicht in elke fase helpt het team om acties te synchroniseren en fouten te voorkomen.
release/2.5.0. develop blijft feature-takken accepteren voor de volgende versie.v2.5.0.Punt 6 — terugmerge in develop — wordt vaak vergeten, maar is van cruciaal belang. Zonder dit komen bugfixes die in de release zijn gemaakt niet in develop terecht, en in de volgende release kunnen dezelfde fouten opnieuw optreden.
De levensduur van een release-tak hangt af van de complexiteit van de release en de kwaliteit van de code in develop. Gemiddeld duurt de voorbereiding 2 tot 5 werkdagen voor een middelgrote mobiele applicatie.
In de release-tak wordt een strikt beperkte set taken uitgevoerd. Elke afwijking van deze lijst schendt het Git Flow-model en creëert risico's voor de stabiliteit van de release.
| Type wijzigingen | Toegestaan | Voorbeeld |
|---|---|---|
| Versiebeheer | Ja | Bijwerken van versionName in build.gradle |
| Bugfixes | Ja | Herstellen van crash bij opstarten |
| Lokalisatie | Ja | Toevoegen van vertalingen voor nieuwe schermen |
| Documentatie | Ja | Bijwerken van CHANGELOG en README |
| Nieuwe functies | Nee | Toevoegen van een nieuw profielscherm |
| Refactoring | Nee | Herschrijven van de netwerklaag |
| Bibliotheekupdates | Voorzichtig | Alleen patch-versies voor bugfixes |
De regel van verbod op nieuwe functies — de belangrijkste in de release-tak. Als een functie de release niet heeft gehaald, wacht ze op de volgende cyclus. Poging om een onvoltooide functie in de release-tak te krijgen — de belangrijkste oorzaak van deadline-overschrijdingen en bugs in productie.
In de release-tak wordt verplicht het versienummer van de applicatie bijgewerkt. Voor Android zijn dit de velden versionCode en versionName in build.gradle, voor iOS — CFBundleShortVersionString in Info.plist.
// build.gradle (app-level) — versie-update in de release-tak
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// Voor iOS — Info.plist bijwerken
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Beginnende ontwikkelaars verwarren vaak release en hotfix-takken, hoewel hun doel fundamenteel verschillend is. Een fout bij het kiezen van het taktype kan leiden tot vertraging van een kritieke correctie of verstoring van het releaseproces.
Als een bug wordt ontdekt tijdens de release-voorbereiding (in de release-tak) — is dit een gewone bugfix. Als een bug wordt ontdekt in productie (op main) — is dit een hotfix en wordt deze gemaakt vanuit main, zelfs als de release-tak al bestaat.
Een uniforme standaard voor naamgeving van release-takken vereenvoudigt de navigatie door de repository en stelt CI/CD-systemen in staat automatisch te bepalen dat de tak bij het releaseproces hoort.
release/2.5.0.release/merlin.release/2024-12-01.Het formaat release/X.Y.Z — heeft de voorkeur omdat het de tak expliciet koppelt aan het versienummer dat aan de release wordt toegekend. Dit vereenvoudigt het zoeken en de automatische verwerking door CI/CD-scripts.
Terugkoppeling (merge back) van de release-tak in develop — een van de belangrijkste en tegelijkertijd vaak overgeslagen operaties. Zonder dit blijven alle bugfixes die in de release zijn gemaakt alleen in de releaseversie en komen ze niet in de volgende releasecyclus.
Het terugkoppelingsproces wordt uitgevoerd nadat de release-tak al in main is gemerged. Eerst wordt release samengevoegd in develop, daarna — verwijderd. Dit garandeert dat develop alle correcties bevat die tijdens de release-voorbereiding zijn gemaakt.
Na terugkoppeling kunnen conflicten ontstaan — vooral als er in develop al nieuwe feature-takken zijn verschenen die dezelfde bestanden hebben gewijzigd. De ontwikkelaar verantwoordelijk voor de release lost deze conflicten op en pusht develop naar de server.
Sommige teams gebruiken rebase in plaats van merge voor terugkoppeling, zodat de geschiedenis lineair blijft. Merge is echter veiliger voor develop omdat het de commit-geschiedenis niet herschrijft die mogelijk al door andere ontwikkelaars is gebruikt.
Laten we de volledige werkcyclus met de release-tak bekijken: van aanmaak tot verwijdering na een succesvolle release van de mobiele applicatie versie 2.5.0.
# 1. Release-tak aanmaken vanuit develop
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Versie-update en bugfixes
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Bugs oplossen (alleen bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Release-tak naar server pushen
git push origin release/2.5.0
# 5. Release mergen in main
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Terugkoppeling naar develop
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Release-tak verwijderen
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Commando's 5 en 6 — dubbele merge — zijn van cruciaal belang. Eerst krijgt main de releasecode en tag, daarna synchroniseert develop met de bugfixes uit de release. Als stap 6 wordt overgeslagen, komen de correcties uit de release niet in de volgende ontwikkelcyclus.
Voor mobiele projecten met regelmatige releases kan het proces van het aanmaken van de release-tak en het bijwerken van de versie worden geautomatiseerd via CI/CD-scripts. GitHub Actions maakt het mogelijk een workflow te creëren die bij een druk op de knop een release-tak aanmaakt met automatische versie-update.
Voor mobiele projecten met regelmatige releases kan het proces van het aanmaken van de release-tak en het bijwerken van de versie worden geautomatiseerd via CI/CD-scripts. GitHub Actions maakt het mogelijk een workflow te creëren die bij een druk op de knop een release-tak aanmaakt met automatische versie-update.
# GitHub Actions — automatisering van het aanmaken van release-takken
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Veelgestelde vragen
Slechts één release-tak tegelijkertijd, als u Git Flow volgt. Het hebben van twee actieve release-takken betekent dat het team twee releases parallel probeert uit te brengen — dit schendt het principe van opeenvolgende releases en veroorzaakt verwarring met versies.
Verwijder de commits van de onvoltooide functie uit de release-tak via git revert en stel de functie uit tot de volgende release. Breng nooit onvoltooide functionaliteit in productie — technische schuld en potentiële bugs zijn de haast niet waard.
Voor eenvoudige releases met één correctie kan de release-tak worden overgeslagen en kan direct vanuit develop naar main worden gemerged. Voor standaard releases is de release-tak echter verplicht — deze legt de versie vast, isoleert de voorbereiding en zorgt voor dubbele merge van bugfixes.
Gebruik git revert in main om een nieuwe commit te maken die alle wijzigingen van de release ongedaan maakt. Verwijder vervolgens de release-tag met het commando git push origin --delete vX.Y.Z. Maak na het oplossen van de problemen een nieuwe release-tak aan met een verhoogd patchnummer.
Release candidate (RC) — is een build-artefact dat de eindtesten doorloopt. Release branch — is de Git-tak waaruit de release candidate wordt gemaakt. Eén release-tak kan meerdere RC-builds genereren (RC1, RC2, enz.) naarmate bugs worden opgelost.
Samenvatting
release/X.Y.Z met versienummer volgens SemVer.We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook