Feature Branch

Ein Feature Branch ist eine Kopie der Hauptcodebasis, in der ein einzelner Softwareentwickler oder ein Team von Softwareentwicklern an einem neuen Feature arbeiten kann, bis es fertiggestellt ist.

Was ist ein Feature Branch?

Ein Feature Branch ist eine Kopie der Hauptcodebasis, in der ein einzelner Softwareentwickler oder ein Team von Softwareentwicklern an einem neuen Feature arbeiten kann, bis es fertiggestellt ist.

Wenn viele Entwickler in derselben Codebasis arbeiten, ist es wichtig, eine Strategie für die Zusammenarbeit zu haben. Um das gegenseitige Überschreiben von Änderungen zu vermeiden, erstellen Entwickler ihre eigene Kopie der Codebasis – sogenannte Branches. Analog zu einem Baum wird der Hauptbranch manchmal als Trunk bezeichnet. Der Vorgang, die Änderungen einer individuellen Kopie in den Haupt-Trunk zu übernehmen, wird als Merging bezeichnet.

Entwicklungsprozess mit Feature Branches

Bei der Entwicklung mit Feature Branches führen einzelne Entwickler oder Teams ihren Branch erst dann zusammen, wenn ein Feature abgeschlossen ist – manchmal arbeiten sie wochen- oder monatelang an einer separaten Kopie. Dieser lange Zeitraum kann den Merge-Prozess erschweren, da sich der Trunk oder Master zwischenzeitlich durch Merges anderer Entwickler wahrscheinlich verändert hat. Dies wird als Merge-Konflikt bezeichnet.

Die Entwicklung mit Feature Branches und das Zusammenführen von Quellcode wird in Versionskontrollsoftware wie Git verwaltet, am bekanntesten als der Dienst Github. Der Hauptbranch und die Feature Branches befinden sich in diesem Code-Repository (oder Repo), und Entwickler führen einen Checkout des Codes durch, um einen neuen Branch zu erstellen, von dem aus sie arbeiten.

Sobald die Änderungen am Code vorgenommen wurden, erstellt der Entwickler einen sogenannten Pull Request – eine Anfrage an andere Entwickler im Team, ein Code-Review durchzuführen, um sicherzustellen, dass der lokale Branch keine Fehler enthält und auch keine Fehler verursacht, wenn er in den Hauptbranch gemergt wird. Sobald ein Branch gründlich überprüft wurde, kann er in den Hauptbranch gemergt werden und Teil des Mainline-Repos werden.

Die Git-Branch-Entwicklung ist eine Methode, um die Arbeit vieler Entwickler an derselben Codebasis zu verwalten. Moderne Teams setzen häufig auf kontinuierliche Integration und Trunk-Based Development, um Probleme mit Bugfixes und Merge-Konflikten zu vermeiden, die aus dem Branching-Modell der Codeentwicklung entstehen. Dies hilft, Probleme zu vermeiden, wenn mehrere Personen an derselben Codebasis arbeiten, und führt ein detailliertes Protokoll darüber, welcher Code von wem, wann und wo hinzugefügt wurde. Dieser Prozess wird auch als Rebasing bezeichnet.

Was tun bei Problemen mit einem Feature Branch

Einer der Vorteile der Entwicklung in einem Feature Branch ist, dass der Mainline-Code nicht beeinflusst wird, bis der Branch zurückgeführt wird. Mit einem Git-Workflow können Sie mithilfe der Versionskontrollfunktionen auf frühere Versionen zurücksetzen.

Hier sind einige gängige Git-Funktionen, die bei der Diagnose und dem Rollout eines Hotfixes helfen

  • Verwenden Sie git pull, um den neuesten Code vom Hauptbranch herunterzuladen. Wenn Sie vom Hauptbranch pullen, ist dieser Befehl ein Synonym für git pull master origin.

  • Verwenden Sie git push, um den aktualisierten Code an Ihren Entwicklungsbranch zurückzusenden.

  • Git branch war wahrscheinlich der Befehl, den Sie ausgeführt haben, um vom Hauptbranch abzuzweigen.

  • Git checkout ermöglicht es Ihnen, zu verschiedenen Versionen eines Branches zu wechseln. Dies teilt Git mit, in welcher Version Ihre Codeänderungen aufgezeichnet werden sollen, bevor Sie sie zurücksenden.

  • Git merge ist im Wesentlichen das Gegenteil eines Git Branch und ermöglicht es Ihnen, Ihre Änderungen wieder in den Mainline-Code zurückzuführen, von dem Sie abgezweigt haben, und anschließend Ihren Branch zu entfernen.

Mit diesen Befehlen kann das DevOps-Team seine Entwicklungsarbeit bewerten und das Versionskontrollsystem nutzen, um bestimmte Versionen zu debuggen und bei Bedarf zurückzusetzen. Wenn Sie in einer Organisation arbeiten, in der viele Teammitglieder an derselben Codebasis arbeiten und Feature Branches verwenden, kann dies helfen, Probleme schnell zu diagnostizieren.

Warum Branching-Strategien verwenden

Die Verwendung von Feature Branches isoliert jedes Feature in seinen eigenen separaten Bereich, der von der Versionskontrollsoftware (üblicherweise Git) überwacht wird. Dies ermöglicht die Arbeit an neuen, experimentellen Features, ohne den Mainline-Code direkt zu beeinflussen, und erlaubt dennoch, neue Versionen und Updates abzurufen, die möglicherweise während der Arbeit am neuen Feature vorgenommen wurden. Dies ist besonders hilfreich in Teams, in denen mehrere Teammitglieder am selben zentralen Code-Repository arbeiten.

Ein separater Branch isoliert Probleme und Entwicklungen in einen Release-Branch, der nach Abschluss wieder zusammengeführt werden kann. Ein Git-Workflow und klare Kommunikationswege zwischen Entwicklern können helfen, Konflikte zu vermeiden und ermöglichen es, verschiedene Branches gleichzeitig zu entwickeln, ohne sich gegenseitig zu beeinträchtigen.

Als Teil einer Branch-Strategie ist es wichtig, sich nicht nur auf den Gitflow zu konzentrieren, sondern auch auf Feature-Branch-Workflow-Praktiken wie Branch-Namenskonventionen und Code-Reviews. Die Versionskontrolle bietet eine äußerst hilfreiche Funktionalität, die es mehreren Teammitgliedern ermöglicht, Code vor der Veröffentlichung zu überprüfen.

Einige gängige Namenskonventionen für Feature Branches:

  • Seien Sie beschreibend – welches Feature wird bearbeitet

  • Fassen Sie sich kurz, verwenden Sie nicht mehr Wörter als nötig. Falls mehr Erklärung erforderlich ist, fügen Sie diese in der Beschreibung hinzu

  • Formulieren Sie so, dass andere Entwickler verstehen können, woran gearbeitet wird

Auch wenn Sie an mehreren neuen Features gleichzeitig arbeiten, ist es empfehlenswert, für jedes einzelne Feature einen eigenen Branch zu erstellen, damit sie nicht miteinander in Konflikt geraten.

Wenn Sie bereit sind, verwenden Sie einen Pull Request, damit andere Teammitglieder Ihren Code überprüfen und ihn wieder in das zentrale Repository mergen können. Es ist keine gute Praxis, den eigenen Code selbst zu mergen und zu überprüfen. Es kann immer unvorhergesehene Probleme mit Ihrem Feature geben, die andere im Review erkennen können.

Kontinuierliche Integration und Feature Branches

Eine Alternative zum Feature-Branch-Workflow ist die kontinuierliche Integration – eine Softwareentwicklungsmethodik, bei der neue Codeänderungen kontinuierlich in die Mainline oder den Trunk integriert werden, anstatt zu warten, bis ein neuer Feature Branch wochen- oder monatelang in Entwicklung war und vom Hauptbranch abgewichen ist.

Kontinuierliche Integration, auch bekannt als Trunk-Based Development, hilft Merge-Konflikte zu minimieren, indem Änderungen kontinuierlich in eine einzige Quelle zusammengeführt werden, um Feature-Branching zu vermeiden. Kontinuierliche Integration kann zusammen mit Praktiken wie Feature Flagging Entwicklern helfen, Code schneller bereitzustellen und weniger Zeit für den Abgleich verschiedener Codeversionen aufzuwenden.