Git
Chapters ▾ 2nd Edition

3.4 Git Branching - Branching-Workflows

Branching-Workflows

Jetzt haben Sie die Grundlagen des Verzweigens (Branching) und Zusammenführens (Merging) kennengelernt. Was können oder sollten Sie damit anfangen? In diesem Abschnitt werden wir einige gängige Arbeitsabläufe vorstellen, welche das vereinfachte Branching ermöglichen, so dass Sie entscheiden können, ob Sie es in Ihren eigenen Entwicklungszyklus integrieren möchten.

Langfristige Branches

Da Git ein einfaches 3-Wege-Merge verwendet, ist mehrmaliges Zusammenführen von einem Branch in einen anderen über einen langen Zeitraum generell einfach zu bewerkstelligen. Das bedeutet, Sie können mehrere Branches haben, die immer offen sind und die Sie für unterschiedliche Stadien Ihres Entwicklungszyklus verwenden; Sie können sie regelmäßig mit anderen zusammenführen.

Viele Git-Entwickler haben einen Arbeitsablauf, welcher den Ansatz verfolgt, nur vollkommen stabilen Code im master-Branch zu haben – möglicherweise auch nur Code, der released wurde oder werden soll. Sie haben weitere parallele develop oder next Branches, auf dem Sie arbeiten oder den Sie für Stabilitätstests nutzen – dieser ist nicht zwangsläufig stabil, aber wann immer er einen stabilen Zustand erreicht, kann er mit dem master-Branch zusammengeführt werden. Das wird benutzt, um Themen-Branches (kurzfristige Branches, wie Ihr früherer iss53-Branch) einfließen zu lassen, wenn diese fertiggestellt sind, um sicherzustellen, dass diese alle Tests bestehen und keine Fehler einschleppen.

Eigentlich reden wir gerade über Pointer, die sich in der Reihe der Commits, die Sie durchführen, aufwärts bewegen. Die stabilen Branches sind weiter hinten und die allerneuesten Branches sind weiter vorn im Verlauf.

Lineares Modell eines Branchings mit zunehmender Stabilität
Figure 26. Lineares Modell eines Branchings mit zunehmender Stabilität

Es ist gewöhnlich einfacher, sich die verschiedenen Branches als Silos vorzustellen, in denen Sätze von Commits in stabilere Silos aufsteigen, sobald sie vollständig getestet wurden.

„Silo“-Modell eines Branchings mit zunehmender Stabilität
Figure 27. „Silo“-Modell eines Branchings mit zunehmender Stabilität

Sie können das für mehrere Stabilitätsgrade einrichten. Einige größere Projekte haben auch einen Branch proposed (vorgeschlagen) oder pu (proposed updates – vorgeschlagene Updates), in welchem Branches integriert sind, die vielleicht noch nicht bereit sind, in den next oder master Branch einzufließen. Die Idee dahinter ist, dass Ihre Branches verschiedene Stabilitäts-Level repräsentieren; sobald sie einen Grad höherer Stabilität erreichen, werden sie mit dem nächsthöheren Branch zusammengeführt. Nochmal, langfristig verschiedene Branches parallel laufen zu lassen, ist nicht notwendig, aber oft hilfreich, insbesondere wenn man es mit sehr großen oder komplexen Projekten zu tun hat.

Themen-Branches

Themen-Branches (Topic-Branches) sind in Projekten jeder Größe nützlich. Ein Themen-Branch ist ein kurzlebiger Branch, welchen Sie für eine ganz bestimmte Funktion oder zusammengehörende Arbeiten erstellen und benutzten. Das ist etwas, was Sie wahrscheinlich noch nie zuvor mit einem Versionsverwaltungssystem gemacht haben, weil es normalerweise zu aufwändig und mühsam ist, Branches zu erstellen und zusammenzuführen. Aber bei Git ist es vollkommen üblich, mehrmals am Tag Branches zu erstellen, an ihnen zu arbeiten, sie zusammenzuführen und sie anschließend wieder zu löschen.

Sie haben das im letzten Abschnitt an den Branches iss53 und hotfix gesehen, die Sie erstellt haben. Sie führten mehrere Commits auf diesen Branches durch und löschten sie sofort, nachdem Sie sie mit Ihrem Hauptbranch zusammengeführt haben. Diese Technik erlaubt es Ihnen, schnell und vollständig den Kontext zu wechseln – da Ihre Arbeit auf verschiedene Depots aufgeteilt ist, wo alle Änderungen auf diesem Branch unter diese Thematik fallen, ist es leichter nachzuvollziehen, was bei Code-Überprüfungen und ähnlichem geschehen ist. Sie können die Änderungen darin für Minuten, Tage oder Monate aufbewahren und sie einfließen lassen (mergen), wenn diese fertig sind, ungeachtet der Reihenfolge, in welcher diese erstellt oder bearbeitet wurden.

Betrachten wir folgendes Beispiel: Sie erledigen gerade einige Arbeiten (auf master), zweigen davon ab wegen eines Problems (iss91), arbeiten daran eine Weile, zweigen davon den zweiten Branch ab, um eine andere Möglichkeit zur Handhabung des selben Problems auszuprobieren (iss91v2), wechseln zurück zu Ihrem master-Branch und arbeiten dort eine Zeitlang, und zweigen dann dort nochmal ab, um etwas zu versuchen, bei dem Sie sich nicht sicher sind, ob es eine gute Idee ist (dumbidea-Branch). Ihre Commit-Verlauf wird in etwa so aussehen:

Mehrere Themen-Branches
Figure 28. Mehrere Themen-Branches

Angenommen, Sie haben sich jetzt entschieden, dass Ihnen die zweite Lösung für Ihr Problem (iss91v2) am besten gefällt; und Sie haben den dumbidea-Branch Ihren Mitarbeitern gezeigt und es hat sich herausgestellt, dass er genial ist. Sie können also den ursprünglichen iss91-Branch (unter Verlust der Commits C5 und C6) wegwerfen und die anderen beiden einfließen lassen. Ihr Verlauf sieht dann so aus:

Verlauf nach dem Mergen von `dumbidea` und `iss91v2`
Figure 29. Verlauf nach dem Mergen von dumbidea und iss91v2

In Kapitel 5 Verteiltes Git werden wir die verschiedenen möglichen Arbeitsabläufe für Ihr Git-Projket noch detaillierter betrachten. Bevor Sie sich also entscheiden, welches Branching-Modell Sie für Ihr nächstes Projekt nutzen wollen, sollten Sie unbedingt dieses Kapitel gelesen haben.

Während Sie das alles machen, ist es wichtig, daran zu denken, dass alle diese Branches nur lokal existieren. Wenn Sie Branches anlegen und zusammenführen, geschieht das alles nur in Ihrem lolalen Git-Repository – es findet keine Server-Kommunikation statt.