Grundlagen der Source Control – Teil 1

Das Repository

In der heutigen Zeit sind Versionsverwaltungssysteme wie Git Standard in der App-Entwicklung. Egal, ob man privat an eigenen Projekten arbeitet oder zusammen mit einem kleinen oder größeren Team – mit möglicherweise sogar international verstreut sitzenden Kollegen – an dem nächsten großen Ding tüftelt, dank Versionsverwaltung kommt man sich wesentlich weniger in die Quere und kann unabhängig voneinander an den jeweils eigenen Aufgaben arbeiten. Dazu erhält man eine Historie der durchgeführten Änderungen und die Möglichkeit, schnell einen älteren Zustand wiederherzustellen, sollte es doch einmal zu Problemen kommen (wir sind schließlich alle nur Menschen und machen auch mal Fehler).

Was mich betrifft, so nutze ich für die Versionsverwaltung meiner Projekte eigentlich schon immer separate Apps, allen voran Tower (das ist übrigens keine Werbung, sondern meine persönliche Empfehlung ;)). Vor kurzem allerdings startete ich ein kleines Experiment, in dem ich versuche, auf dem Mac – soweit möglich – ausschließlich Apps zu nutzen, die ich über den App Store beziehen kann. Da besagte App Tower nicht im Mac App Store anzutreffen ist und ich bisher nicht in eine andere Lösung investieren wollte, habe ich mich einmal näher mit den in Xcode integrierten Funktionen zur Versionsverwaltung auseinandergesetzt. Denn prinzipiell ist es ohne weiteres möglich, Repositories und Branches vollständig über Apples IDE zu verwalten und Änderungen im Code darüber einzuspielen beziehungsweise zu laden.

In dieser neuen Artikelreihe möchte ich euch die Grundfunktionen vorstellen, die Xcode im Zusammenspiel mit Source Control zur Verfügung stellt und hierbei auch gleich ein paar grundlegende Begriffe klären, die beim Thema Source Control im Allgemeinen eine wichtige Rolle spielen.

Das Repository

Beginnen möchte ich hierbei mit dem sogenannten Repository. Ein solches bezeichnet einen Container für ein Projekt, in den alle durchgeführten Änderungen fließen und der alle projektspezifischen Dateien enthält. In der App-Entwicklung gibt es typischerweise ein solches Repository pro App-Projekt.

Erstellt man ein neues Projekt in Xcode, kommt man bereits zum ersten Mal mit der Source Control und im speziellen mit den genannten Repositories in Berührung. Hat man alle grundlegenden Infos zum neuen Projekt in Xcode hinterlegt und befindet sich in der Maske, über die man einen passenden Speicherort auswählt, ist am unteren Rand eine Checkbox mit dem Titel Create Git repository on my Mac zu sehen. Die ist standardmäßig aktiv und sorgt dafür, dass nach einem Klick auf den Button Create nicht nur das neue Xcode-Projekt, sondern auch gleichzeitig ein zugehöriges Repository auf Basis des Versionsverwaltungssystems Git erzeugt wird. Es gibt wohl kaum einen komfortableren Weg, ein Xcode-Projekt um die Unterstützung der Source Control zu erweitern, aber natürlich nur dann, wenn das Projekt nicht bereits zuvor existiert.

Über die hervorgehobene Checkbox lässt sich ein neues Xcode-Projekt direkt mit einem zugehörigen Git-Repository erstellen.
Über die hervorgehobene Checkbox lässt sich ein neues Xcode-Projekt direkt mit einem zugehörigen Git-Repository erstellen.

Sollte die beschriebene und im Screenshot gezeigte Checkbox übrigens nicht sichtbar sein, liegt das sehr wahrscheinlich daran, dass die Speicheroptionen in diesem Fenster nicht eingeblendet sind. Klickt einfach auf die Options-Schaltfläche, um sie sowohl ein- als auch auf Wunsch wieder auszublenden.

Repository nachträglich erstellen

Der beschriebene Weg ist immens komfortabel, möchte man ein neues Xcode-Projekt von Beginn an mit einem Repository ausstatten, doch was macht man mit Projekten, die bereits erstellt wurden ohne sie mit einem zugehörigen Repository zu koppeln? Wie richtet man ein passendes Repository nachträglich noch ein?

Erfreulicherweise bringt Xcode auch hierfür eine praktische und einfach zu verwendende Funktion mit. Nachdem man das betreffende Repository-lose Projekt geöffnet hat, wählt man über das Xcode-Menü den Punkt Source Control -> Create Git Repositories… aus. Xcode checkt anschließend alle geöffneten Projekte und listet diejenigen auf, die bisher mit keinem Repository gekoppelt sind. Über die Checkbox am linken Rand jedes Eintrags legt man fest, ob ein Repository für das betreffende Projekt erstellt werden soll oder nicht.

Xcode listet alle Projekte auf, die noch über kein Repository verfügen und bietet an, ein solches für die gewählten Projekte zu erstellen.
Xcode listet alle Projekte auf, die noch über kein Repository verfügen und bietet an, ein solches für die gewählten Projekte zu erstellen.

Hat man seine Auswahl festgelegt, reicht ein Klick auf die Schaltfläche Create und Xcode kümmert sich um den Rest; einfacher und komfortabler geht es wohl wirklich kaum.

Fazit und Ausblick

Versionsverwaltung ist ein Thema, das für jeden App-Entwickler von großem Interesse sein sollte. Es ist in meinen Augen nicht nötig, dieses Thema bis in seine komplexesten Facetten verinnerlicht zu haben, doch alleine mit den Basics kann man den Entwicklungsprozess enorm optimieren und beispielsweise ohne größere Probleme (kleine gibt es immer ;)) parallel an verschiedenen Features einer App arbeiten und gleichzeitig ein Bugfix-Update entwickeln und veröffentlichen, ohne das man sich auf Grund all dieser verschiedenen Entwicklungszweige selbst in die Quere kommt. Diese Vorteile gelten auch dann, wenn man nicht im Team – wo Source Control seine wahren Stärken ausspielt –, sondern alleine an einem App-Projekt arbeitet.

In den kommenden Artikeln in dieser Reihe wird es unter anderem darum gehen wie man Änderungen im Code in ein Repository einspielt, ältere Projektstände wiederherstellt, extern auf Servern gesicherte Repositories verwendet und Accounts wie die von GitHub oder BitBucket in Xcode effizient einsetzt.

Euer Thomas


Kommentare

2 Antworten zu „Grundlagen der Source Control – Teil 1“

  1. Sehr verständlich geschrieben.

Schreibe einen Kommentar zu Reiner Antworten abbrechen

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