Git ist ein Open-Source Programm zur Versionskontrolle von Dateien, das vor allem für die Programmierung in Teams genutzt wird. Damit können mehrere Personen an einem Projekt arbeiten, ohne, dass es zu Problemen mit verschiedenen Codeständen kommt. Einen zusätzlichen Hype bekam Git durch den Aufschwung von sogenannten DevOps Ansätzen in der Programmierung.
Was ist DevOps?
Der zentrale Punkt von DevOps umfasst das Team, welches von der Erstellung eines Prototypen bis zum Livegang der fertigen Anwendung und weit darüber hinaus zusammenarbeitet. Dazu werden verschiedene Teamrollen definiert, die einen reibungslosen und schnellen Ablauf gewährleisten sollen.

Diese Vorgehensweise unterscheidet sich zu bisherigen Praktiken darin, dass nun das Entwicklungsteam und das Operationsteam eng miteinander zusammenarbeiten. Davor wurden Anwendungen von Entwicklern erstellt und sobald sie live gingen an das Operationsteam abgegeben, welches die Erreichbarkeit und Performance des Services sicherstellen sollte. Dadurch gehen jedoch wertvolle Informationen zwischen den beiden Teams verloren, beispielsweise Verbesserungsvorschläge vom Operationsteam oder Know-How vom Entwicklungsteam.
Je nach Anwendung können auch zusätzlich zu diesen Abteilungen Experten der Security oder Qualitätssicherung ins engere Projektteam hinzugezogen werden. Vor allem dann, wenn Aspekte aus diesen Bereichen eine besondere Bedeutung für das Projekt haben.
Das Team verwendet Praktiken, die ursprünglich aus der Prozessautomatisierung bekannt sind und sich auch auf die Softwareentwicklung anwenden lassen. Im Mittelpunkt steht dabei eine endlose Schleife an Abläufen, die schrittweise durchlaufen werden.
Was sind Versionskontrollen?
Bei der Programmarbeit im Team ist eine Versionskontrolle immens wichtig. Möglicherweise arbeiten mehrere Personen an derselben Funktion im Code oder an Funktionen, die sich gegenseitig beeinflussen, da der Output der einen Funktionen der Input der anderen ist. Deshalb muss sichergestellt werden, dass sobald einzelne Aufgaben erledigt wurden, die Funktionalität des Gesamtprojekts immer noch sichergestellt ist.
Um diese verschiedenen Versionen desselben Codes verwalten zu können, gibt es drei Arten von Versionskontrollen:
- Lokal: Bei der lokalen Versionskontrolle wird auf dem Computer einfach ein neues Verzeichnis angelegt, in das man dann die Dateien kopiert. So hat man sichergestellt, dass dort der alte Stand als Fallback wieder nutzbar ist.
- Zentral: Bei einer zentralen Versionskontrolle liegt dieses Verzeichnis auf einem zentralen Server. Dann können die mitarbeitenden Programmierer sich den aktuellen Stand runterladen und auf ihr Gerät downloaden. Sobald die Änderungen vorgenommen wurden, kann das Verzeichnis auf dem Server überschrieben werden, bzw. eine Version angelegt werden.
- Dezentral: Die dezentrale Versionskontrolle agiert relativ ähnlich zur zentralen mit dem Unterschied, dass jeder Programmierer sich das komplette(!) Verzeichnis immer lokal runterlädt, um dann Änderungen vornehmen zu können. Somit liegt der aktuelle Stand dezentral bei allen Teammitgliedern ab.
Welche Begriffe nutzt man im Git Umfeld?
Bevor wir uns im Detail damit beschäftigen können, wie man mithilfe von Git konkrete Programmierprojekte umsetzen kann, müssen wir erst ein paar Begriffe definieren, die in diesem Umfeld häufig gebraucht werden:
- Das Repository ist ein Verzeichnis, das den aktuellen Stand des Projekts, sowie alle Änderungen enthält. Darüber hinaus gibt es das remote Repository, das bei dem Entwickelnden lokal abgespeichert ist, wenn neue Komponenten hinzugefügt werden sollen.
- Mit jedem Commit wird der aktuelle Stand als eine neue Version abgelegt. Es ist somit eine Art des Speicherns von Änderungen im lokalen Repository.
- Mit einem Push-Request überschreibt man den Stand eines anderen Repositories.
- In den Branches können gleichzeitig neue Komponenten entwickelt werden.
- Wenn verschiedene Branches zusammengeführt werden, spricht man vom „mergen„.
Wie funktioniert Git in der Programmierung?
Git ist eine sogenannte dezentrale Versionskontrolle. Dabei hat jeder Programmierer eine Kopie des aktuellen Repositories, also des Verzeichnisses, auf seinem lokalen Computer abgespeichert. Mit dieser lokalen Kopie kann der Programmierer dann entweder neue Dateien im Projekt erstellen oder bestehende abändern. Gleichzeitig kann er auch lokal testen und sicherstellen, dass die lokalen Änderungen keine Auswirkungen auf die Funktionalität des Gesamtprogramms haben.
Nachdem der aktuellste Stand runtergeladen wurde, erstellt man einen Branch, in dem die Neuentwicklung programmiert wird. Sobald man die Änderungen vorgenommen und getestet hat, kann man sie committen, also speichern. Anschließend kann man jedoch nicht direkt den neuesten Stand einfach wieder in das Repository hochladen.

In der Zwischenzeit zwischen dem letzten Download des Repositories und der Umsetzung der Änderung können nämlich andere Teammitglieder das Repository überschrieben haben. Deswegen führt man einen Pull-Request durch, um den neuesten Stand des Repositories auf dem lokalen Rechner zu haben. Dann kann man diesen neuen Stand mit den Änderungen im Branch „mergen“. Dabei stellt man sicher, dass die eigenen Änderungen keine negativen Auswirkungen auf die Arbeit der anderen Teammitglieder haben, erst dann kann man seinen Stand mit einem Push-Request im Repository abspeichern.
Was sind die Vorteile von Git?
Durch die dezentrale Struktur von Git ist sichergestellt, dass die Daten eigentlich nicht verloren gehen können. Dadurch, dass jedes Teammitglied eine Version des Repositories auf seinem Rechner gespeichert hat, sollte ein halbwegs aktueller Stand des Projektes immer erhalten bleiben. Bei einer zentralen Versionskontrolle hingegen kann ein einfacher Serverausfall zum Verlust des kompletten Repositories führen.
Bei den Push-Requests kommt es nicht direkt zu einem überschreiben des Repositories, sondern es werden lediglich neue Versionen angelegt, die natürlich auch zu einem späteren Zeitpunkt wiederhergestellt werden können. Somit bietet Git die Möglichkeit auch zu alten Versionen zurückkehren zu können, wenn das gewünscht ist.
Die Leistungsfähigkeit von Git ist im Vergleich zu Wettbewerbern sehr hoch, da es äußert effizient mit Speicher- und Performancekapazitäten umgeht.
Das solltest Du mitnehmen
- Git ist eine dezentrale Versionskontrolle mit dessen Hilfe komplexe Programmierprojekte in Teamarbeit ausgeführt werden können.
- Mit der Hilfe von Git können mehrere Personen am gleichen Projekt arbeiten und Änderungen vornehmen und trotzdem sicherstellen, dass die einzelnen Funktionen später als Ganzes funktionieren.
- Die Vorteile von Git bestehen darin, dass die Ausfallwahrscheinlichkeit sehr gering ist, da jedes Mitglied einen halbwegs aktuellen Stand des Repositories auf dessen Gerät gespeichert hat. Außerdem kann immer wieder auf ältere Versionsstände zurückgegriffen werden.
Andere Beiträge zum Thema Git
- w3schools bietet ausführliche Erläuterungen zu nützlichen Git-Befehlen.