Workflows in der Softwareentwicklung
Warum sind Git-Workflows wichtig?
Ein entscheidender Aspekt für effiziente Arbeit in der Softwareentwicklung ist ein passender Git-Workflow. Dabei geht es darum, wie Codeänderungen verwaltet und unterschiedliche Versionen gehandhabt werden:
- Produktiver Code: Welcher Code wird aktuell produktiv genutzt?
- Testcode: Was wird gerade getestet?
- Entwicklung: An welchen Features oder Bugfixes wird gearbeitet?
Diese Ebenen sollten strikt getrennt sein. Es ist kritisch zu vermeiden, dass ungetesteter Code in die Produktion gelangt. Besonders in Teams kann die Codeverwaltung komplex werden, wenn mehrere Entwickler gleichzeitig am Code arbeiten.
Es gibt zahlreiche Lösungen für diese Herausforderungen. Einige Workflows wie Git Flow sind komplexer, während andere wie GitHub Flow oder GitLab Flow einfacher gehalten sind. Die Wahl des passenden Workflows hängt stark von den Anforderungen des jeweiligen Projekts ab.
Trunk-Based Development
Der einfachste Workflow ist das Trunk-Based Development. Hier arbeitet das gesamte Team direkt auf dem Hauptentwicklungszweig, dem sogenannten Trunk. Es gibt keine langlebigen Branches; alle Änderungen werden direkt integriert.
Um sicherzustellen, dass der Code stabil bleibt, wird vor der Integration ein Pre-Integration-Build durchgeführt. Dieses Modell eignet sich gut für kleinere Teams und Projekte.
Allerdings skaliert dieser Ansatz nicht in großen Projekten mit vielen Beteiligten. Es kann vermehrt zu Merge-Konflikten kommen, und Änderungen lassen sich schwer koordinieren. Oft werden daher kurzlebige Feature-Branches genutzt, um Änderungen zu isolieren und zu überprüfen.
Weitere Informationen: trunkbaseddevelopment.com
GitHub Flow
Der GitHub Flow erweitert das Trunk-Based Development um kurzlebige Feature-Branches. Es existiert ein langlebiger Branch main, von dem aus neue Feature-Branches erstellt werden.
Ablauf:
- Branch erstellen: Für ein neues Feature oder einen Bugfix wird ein Feature-Branch vom
mainerstellt. - Entwicklung: Änderungen finden auf dem Feature-Branch statt.
- Code-Review: Nach Fertigstellung wird ein Pull Request gestellt.
- Merge: Nach dem Review wird der Feature-Branch in
maingemergt. - Deployment: Änderungen werden direkt auf die Produktionsumgebung ausgerollt.
Dieser Workflow ist einfach und effektiv für kontinuierliche Integration und Deployment. Allerdings fehlt eine Staging-Umgebung für Tests vor dem Live-Gang.
Weitere Informationen: GitHub Flow Dokumentation
GitLab Flow
Der GitLab Flow baut auf dem GitHub Flow auf und integriert Umgebungen wie Staging und Produktion.
Hauptmerkmale:
- Langlebige Branches: Neben
mainexistieren Branches wiepre-productionundproduction. - Feature-Branches: Entwicklung findet auf kurzlebigen Feature-Branches statt, die in
maingemergt werden. - Deployment: Änderungen werden von
mainnachpre-productionund schließlich nachproductiongemergt, um den Deployment-Prozess zu steuern.
Dieser Workflow bietet mehr Kontrolle über den Veröffentlichungsprozess und eignet sich für Projekte, die zwischen Entwicklungs-, Test- und Produktionsumgebungen unterscheiden müssen.
Weitere Informationen: GitLab Flow Dokumentation
Git Flow
Der Git Flow ist ein komplexer Workflow, der 2010 von Vincent Driessen vorgestellt wurde.
Struktur:
- Langlebige Branches:
master,develop - Hilfs-Branches: Feature-, Release-, Hotfix-Branches
Ablauf:
- Feature-Branches: Neue Features werden in eigenen Branches vom
developentwickelt. - Integration: Fertige Features werden in
developgemergt. - Release-Branches: Vor einem Release wird ein Release-Branch von
developerstellt, finalisiert und inmasterunddevelopzurückgemergt. - Hotfixes: Dringende Fehlerbehebungen erfolgen auf Hotfix-Branches direkt vom
master.
Obwohl Git Flow viele Szenarien abdeckt, ist er aufgrund seiner Komplexität oft schwer zu handhaben und kann den Entwicklungsprozess verlangsamen.
Hinweis: Vincent Driessen hat 2020 ein Update veröffentlicht, in dem er die Verwendung von Git Flow kritisch hinterfragt.
Weitere Informationen: Ein erfolgreiches Git-Branching-Modell
tags:GitWorkflowSoftwareentwicklungTrunkBasedDevelopmentGitHubFlowGitLabFlowGitFlowVersionskontrolle