Grundlagen der Source Control – Teil 4

Neue Branches erstellen

In den vorangegangenen Artikeln dieser Reihe (siehe Linksammlung am Ende) haben wir die Grundlagen der Source Control kennengelernt. Dazu gehören das Erstellen eines lokalen Repositories sowie das Speichern und Verwerfen von Änderungen.

In diesem Teil der Reihe setzen wir uns nun nach Repository und Commit mit einem weiteren wichtigen Bestandteil von Git auseinander: dem sogenannten Branch.

Was ist ein Branch?

Einfach ausgedrückt enthält ein Branch eine Sammlung von Commits. Standardmäßig enthält jedes neue Xcode-Projekt auf Basis von Git einen solchen Branch. Der trägt den Titel master. Einsehen lässt sich der über den Source Control Navigator in Xcode. Dort finden sich innerhalb eines Repositories drei Ordner: Branches, Tags und Remotes. Unter Branches wird jener eben genannter master mit dem Zusatz (current) aufgeführt.

Im Source Control Navigator von Xcode kann man auf alle verfügbaren Branches eines Repositories zugreifen.
Im Source Control Navigator von Xcode kann man auf alle verfügbaren Branches eines Repositories zugreifen.

(current) gibt hierbei an, dass es sich bei dem zugehörigen Branch um den aktuell aktiven Branch handelt. Alle Commits, die in dem gezeigten Szenario innerhalb des zugrundeliegenden Projekts ausgeführt werden, landen somit im master-Branch.

Der große Vorteil der Source Control besteht darin, dass man beliebig viele weitere Branches für ein Repository erzeugen und fließend zwischen ihnen wechseln kann. Änderungen am Projekt landen dann nur in dem jeweils aktiven Branch und nicht in den anderen.

Das Nutzen mehrerer Branches ist beispielsweise sinnvoll, wenn man für eine bereits veröffentlichte App an einem neuen großen Feature arbeitet. Für dieses Feature könnte man einen neuen Branch erzeugen, in dem alle entsprechenden Anpassungen an der App vorgenommen werden. Parallel dazu kann man während dieser Entwicklungszeit die App über den ursprünglichen Branch durch kleine Bugfix-Änderungen aktuell halten.

Würde es in dem beschriebenen Szenario nur einen Branch und damit nur eine Code-Basis für alle Änderungen geben, müssten für die zwischendurch durchgeführten und veröffentlichten Bugfixes alle Änderungen für das große Feature rückgängig gemacht, auskommentiert oder anderweitig auf inaktiv gesetzt werden. So etwas wäre nicht nur mit enormen Aufwand verbunden, sondern auch immens fehleranfällig. Vergisst man beispielsweise auch nur eine bestimmte Funktion korrekt anzupassen, kann es im schlimmsten Fall zu vollkommen unvorhergesehenen Problemen kommen.

Und selbst wenn alles klappt, muss man nach Ausrollen des Bugfix-Updates wieder alle Feature-Änderungen einpflegen.

Zusammenführen von Branches

Doch womöglich fragt ihr euch gerade, was euch die zwei Branches nützen, wenn sich deren Code-Basis parallel weiter entwickelt und somit voneinander unterscheidet? Dann hat man auf der einen Seite die großen Änderungen für das neue Feature und auf der anderen Seite kleinere Bugfixes. Muss man den Code von einem Branch nun händisch in den anderen übertragen?

Nein, das gehört zu den enorm großen Vorteilen der Versionsverwaltung. Stattdessen kann man zu einem gegebenen Zeitpunkt – beispielsweise wenn das große neue Feature fertig und bereit für die Veröffentlichung ist – zwei Branches zusammenführen, indem man deren Inhalte mergt. Auf diese Art und Weise wandern die Änderungen eines Branches in einen anderen Branch, sodass letzterer beide Welten miteinander vereint. Diesen Aspekt bei der Arbeit mit Branches werden wir uns im kommenden Artikel dieser Reihe näher ansehen.

Neue Branches erstellen und auschecken

Um einen neuen Branch in Xcode zu erstellen wählt man zunächst einen bestehenden per Sekundärklick aus. Im sich öffnenden Kontextmenü findet sich dann ein Eintrag mit dem Titel Branch from „<Branch-Name>“….

Über das Kontextmenü kann ein neuer Branch auf Basis eines bereits bestehenden erstellt werden.
Über das Kontextmenü kann ein neuer Branch auf Basis eines bereits bestehenden erstellt werden.

Wählt man diesen Eintrag aus, bittet Xcode darum, den gewünschten Namen für den neuen Branch einzugeben. Der neue Branch entspricht hierbei zunächst exakt dem, der als Basis für diese Aktion ausgewählt wurde und übernimmt all dessen Commits; im gezeigten Screenshot ist das also der master-Branch.

Über dieses Fenster gibt man den Titel des neuen Branches ein und sieht im „From“-Feld noch einmal, auf welchem Branch der neue basieren wird.
Über dieses Fenster gibt man den Titel des neuen Branches ein und sieht im „From“-Feld noch einmal, auf welchem Branch der neue basieren wird.

Sobald der neue Branch erstellt wurde, taucht er umgehend in der Liste der Branches des zugehörigen Repositories auf und ist auf aktiv gesetzt (zu erkennen am Zusatz (current)).

Der neu erstellte Branch „greatNewFeature“ ist umgehend aktiv.
Der neu erstellte Branch „greatNewFeature“ ist umgehend aktiv.

Änderungen, die noch nicht committet wurden, stehen übrigens nach Erstellung und Wechsel des Branches ohne Einschränkungen im neuen Branch zur Verfügung.

Branch wechseln

Stehen einem so nun mehrere Branches zur Verfügung, ist auch ab und an ein Wechsel der Branches nötig (abhängig davon, an welchem Teil des Projekts man weiterarbeiten möchte). Um den aktiven Branch zu wechseln, klickt man zunächst den gewünschten Ziel-Branch mittels Sekundärklick an. Im Kontextmenü wählt man anschließend den Eintrag Checkout… aus.

Über den Befehl „Checkout...“ kann man jederzeit den aktiven Branch wechseln.
Über den Befehl „Checkout…“ kann man jederzeit den aktiven Branch wechseln.

Xcode fragt anschließend noch einmal nach, ob man den Branch tatsächlich wechseln möchte. Nach einer weiteren Bestätigung durch Klick auf Checkout befindet man sich auf dem gewählten Branch. Alle noch nicht committeten Änderungen vom zuvor aktiven Branch werden hierbei in den Ziel-Branch übernommen.

Fazit

Das Erstellen neuer Branches in Xcode gestaltet sich sehr einfach und unkompliziert. Man wählt zunächst den Basis-Branch aus und erstellt auf dessen Grundlage einen neuen. Der Wechsel zwischen verfügbaren Branches gestaltet sich als ebenso simpel.

Generell ermöglichen Branches es so, parallel an verschiedenen Teilen eines Projekts zu arbeiten. Gerade bei der Arbeit im Team ist das ein enorm wichtiger Aspekt.

Euer Thomas

Weitere Artikel dieser Reihe


Kommentare

6 Antworten zu „Grundlagen der Source Control – Teil 4“

  1. Hallo Thomas,
    Ich möchte eine App entwickeln, die über Zeit immer mehr Funktionen bekommt.
    Wenn ich denn über Zeit meine Programmierkenntnisse verbessert habe.
    Würdest Du für eine Solch geplante App immer Source Control aktivieren?

    Gerd

    1. Hallo Gerd!

      Ja, selbst bei kleinen (Test-)Projekten würde ich immer auf Source Control setzen. Mann muss die Funktionen ja nicht zwingend nutzen, ich finde sie aber schon bei kleinen Projekten enorm nützlich und hilfreich.

  2. Avatar von Torsten Grimm
    Torsten Grimm

    Hallo Thomas,

    vielen Dank für die hervorragend erklärten Inhalte.
    Ich möchte in meinem Projekt 2 Branches miteinander vergleichen. Und zwar den aktuellen mit einem älteren. Allerdings wird immer mit dem vorherigem Branch verglichen. Wie kann ich zwei beliebige aus der Branch-Histrory vergeichen ?

    Vielen Dank und beste Grüße !
    Torsten

    1. Hallo Torsten,

      aus dem Stand weiß ich nicht genau, wie der entsprechende Punkt in Xcode heißt bzw. aussieht (ich bereite mich gerade auf den Feierabend vor^^). In Xcode 13 gibt es jedoch einen neuen Code-Review-Mode. Den aktivierst du über die Schaltfläche mit den beiden entgegengesetzten Pfeilen oberhalb des Editors. Ist der aktiv, solltest du meines Wissens nach über den unteren rechten Rand steuern können, welche Commits du miteinander vergleichen möchtest. Inwieweit das auch Branch-übergreifend möglich ist, kann ich gerade leider nicht sagen.

      Mit besten Grüßen,
      Thomas

      1. Avatar von Torsten Grimm
        Torsten Grimm

        Hallo Thomas,

        das hat mir sehr weiter geholfen. So funktioniert es.
        Vielen herzlichen Dank für die Hilfe.

        Beste Grüße
        Torsten

        1. Super, das freut mich zu lesen! 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert