Überblick: Versionskontrolle mit git
Git ist ein verteiltes Versionskontrollsystem. Es unterscheidet sich von klassischen Versionskontrollsystemen wie CVS oder Subversion darin, dass nicht nur einzelne Stände aus einem zentralen Repository ausgecheckt werden, sondern das das gesamte Repository lokal repliziert wird. Nach einem git clone liegt lokal eine komplett vollwertige Kopie des geklonten Repositories mit der gesamten Projekthistorie vor:
Dies bringt eine Reihe von Vorteilen mit sich:
-
Lokales arbeiten
Unabhängig von einem zentralen Server-Repository können lokal alle Features des Versionskontrollsystems verwendet werden. Dieselben Werkzeuge, mit denen im zentralen Repository die offizielle Version der Software verwaltet wird, können nun auch lokal zur Unterstützung der eigenen Entwicklungsarbeit eingesetzt werden.
Änderungen können zum Beispiel sehr schnell rückgangig gemacht oder wieder verworfen werden. Zwischenstände können im lokalen Repository versioniert werden, ohne dass sie sofort für andere Entwickler im zentralen Repository sichtbar werden.
Dies ist insbesondere interessant, wenn Sie auf das offizielle Repository keinen Schreibzugriff haben, z.B. als Helfer in einem Open-Source-Projekt.
-
Offline arbeiten
Es kann auch offline gearbeitet werden - in der Historie recherieren, zwischen verschiedenen Branches hin- und herwechseln, in diesen weiterarbeiten und Änderungen committen: all dies ist in Git eine lokale Operation. Wenn wieder eine Internet-Verbindung besteht, werden zwischenzeitlich lokal erfolgte Commits in das zentrale Repository übertragen (push) und dort erfolgte Commits in das lokale Repository übernommen (pull). Die Verwendung eines zentralen Repositories ist sogar optional: Git lässt sich auch als rein lokales Werkzeug verwenden, um verschiedene Stände von Dateien und Änderungen daran lokal zu sichern und zu verwalten.
-
An mehreren Themen separat arbeiten
In Git können Branches sehr schnell und unkompliziert angelegt werden - sowohl in Ihrem lokalen Repository für die Verwaltung der eigenen Arbeit als auch in zentralen Repositories zur Koordination unterschiedlicher Versionen oder Entwicklungslinien. So können unkompliziert Branches für jedes Entwicklungsthema, für jedes Feature angelegt werden und die Arbeit daran vermischt nicht mehr in einem “alles-und-jedes”-master-Branch.
Dies wird inbesondere dadurch ermöglicht, dass das Zusammenführen von Branches in Git eine einfache und unkomplizierte Operation ist - soweit Änderungen unterschiedliche Stellen oder unterschiedliche Dateien betreffen, werden die Änderungen von Git selbstständig zusammengefügt; treten Konflikte auf, lassen sich diese unkompliziert beheben. So ist es sehr einfach, zwischen verschiedenen Branches zu wechseln und Branches zusammenzumergen. Dies funktioniert auch wiederholt und “kreuz-und-quer”, da das Zusammenführen von Branches in der Historie dokumentiert wird und damit bekannt ist, welche Änderungen bereits gemergt wurden. Viele Details, wie die automatische Erkennung von umbenannten Dateien tragen dazu bei, das Merges in der Praxis sehr zuverlässig funktionieren.
So ist es problemlos möglich, die Arbeit an ein neuen Features so lange voneinander zu entkoppeln, bis die einzelnen Themen wirklich fertig sind, und erst dann die Änderungen in die zentrale Entwicklungslinie zu übernehmen. Dies wird vor allem dann nützlich, wenn einmal ein Feature später veröffentlicht oder komplett verworfen werden soll.
-
Workflows
git ist sehr flexibel und unterschiedlichste Workflows lassen sich damit gut umsetzen. Neben der Verwendung eines klassischen, zentralen Server-Repositories analog CVS/SVN lassen sich auch Workflows wie “Änderungen müssen erst gereviewt werden, bevor sie übernommen werden” bis hin zu einem stark verteilten Arbeiten, in denen mehrere Repositories unabhängig voneinander existieren, mit git gut bewältigen.
-
Repositories in Sekundenschnelle einrichten
Ein weiterer Pluspunkt ist das exzellente git-Hosting von GitHub und Atlassian/Bitbucket. In Sekundenschnelle können für Open-Source-Projekte und (teilweise kostenpflichtig) für interne Projekte Repositories erstellt und mit anderen Entwicklern geteilt werden.
-
Schnell
Da für die Arbeit mit dem Repository keine Netzzugriffe notwendig werden, sind alle Git-Operationen sehr schnell und behindern nicht durch Wartezeiten die tägliche Arbeit. Hinzu kommt, dass git sehr effizient implementiert ist - auch in größeren Repositories mit tausenden Commits kommt es nur selten zu Wartezeiten.
-
Zuverlässig
git ist extrem zuverlässig: da sämtliche Inhalte durch SHA1-Prüfsummen referenziert und gegengeprüft werden, würde es sofort auffallen, wenn Repository-Inhalte verändert würden, etwa durch einen Bug in der Implementierung oder durch Manipulation des Repositories. Git garantiert, dass es die Inhalte so wieder reproduziert, wie sie ihm zur Versionierung übergeben wurden.