Git vs. SVN – Von verteilter und zentralisierter Versionsverwaltung
Um Änderungen an Dokumenten oder Dateien zu erfassen, existieren sogenannte Versionsverwaltungssysteme. Diese speichern alle durch Bearbeitung entstandenen Versionen inklusive Zeitstempel und Benutzerkennung in einem Archiv, sodass frühere Stände einzelner Daten jederzeit abgerufen oder wiederhergestellt werden können. Dadurch lässt sich nachvollziehen, welcher Nutzer zu einem bestimmten Zeitpunkt Änderungen vorgenommen hat. Die übergeordneten Ziele eines solchen Systems liegen darin, den gemeinsamen Zugriff mehrerer Nutzer auf die Dateien zu koordinieren und die gleichzeitige Entwicklung mehrerer Branches (Entwicklungszweige bzw. Abspaltungen) zu ermöglichen. Typischerweise kommen Versionsverwaltungssysteme in der Software-Entwicklung, bei Büroanwendungen und in Content-Management-Systemen zum Einsatz. Zu den bekannteren Programmen für die Versionsverwaltung zählen Apache Subversion (SVN) und Git. Diese kann man entweder auf dem eigenen Server installieren oder bei einem Hoster anmieten. Der bekannteste webbasierte Hosting-Dienst für Git-Projekte ist GitHub; Subversion-Hosting wird z. B. von RiouxSVN angeboten. Dienste wie SourceForge hosten beide Systeme.
SVN: Der CVS-Nachfolger von CollabNet
Die freie Software Subversion wurde seit Anfang 2000 von CollabNet entwickelt und rund vier Jahre später in einer ersten Version veröffentlicht. Damit trat SVN die Nachfolge des mittlerweile nicht mehr betreuten Vorbilds CVS (Concurrent Versions System) an. 2009 wechselte das Projekt zur Apache Software Foundation, wodurch es den heutigen Namen Apache Subversion erhielt.
SVN greift auf ein zentrales System zur Versionsverwaltung zurück. Das heißt, dass ein allgemein gültiges Verzeichnis (Repository) existiert, auf das alle Nutzer zugreifen. Da gemachte Änderungen nicht miteinander verschmolzen werden können, verhindert das System, dass zwei User gleichzeitig dieselbe Datei bearbeiten. Dazu wird diese dem ersten Benutzer, der auf sie zugreift, zugewiesen und während der Bearbeitungsdauer für andere als schreibgeschützt markiert. Apache Subversion bietet zusätzlich auch die Möglichkeit, dass beliebige Unterpfade unabhängig vom Rest des Pfadbaums heruntergeladen und bearbeitet werden können. Dadurch lassen sich den verschiedenen Nutzern unterschiedliche Lese- und Schreibrechte für sämtliche Pfade zuweisen. Ferner zeichnet sich Subversion dadurch aus, auch leere, umbenannte und verschobene Verzeichnisse ohne Verlust ihrer Historie problemlos aufzuzeichnen.
SVN greift auf ein zentrales System zur Versionsverwaltung zurück. Das heißt, dass ein allgemein gültiges Verzeichnis (Repository) existiert, auf das alle Nutzer zugreifen. Da gemachte Änderungen nicht miteinander verschmolzen werden können, verhindert das System, dass zwei User gleichzeitig dieselbe Datei bearbeiten. Dazu wird diese dem ersten Benutzer, der auf sie zugreift, zugewiesen und während der Bearbeitungsdauer für andere als schreibgeschützt markiert. Apache Subversion bietet zusätzlich auch die Möglichkeit, dass beliebige Unterpfade unabhängig vom Rest des Pfadbaums heruntergeladen und bearbeitet werden können. Dadurch lassen sich den verschiedenen Nutzern unterschiedliche Lese- und Schreibrechte für sämtliche Pfade zuweisen. Ferner zeichnet sich Subversion dadurch aus, auch leere, umbenannte und verschobene Verzeichnisse ohne Verlust ihrer Historie problemlos aufzuzeichnen.
Git: Die Notlösung der Linux-Kernel-Entwickler
Linux-Schöpfer Linus Thorvalds begann im April 2005 – mehr oder weniger unfreiwillig – mit der Entwicklung einer neuen Software zur Versionsverwaltung. Der Grund: Durch eine Änderung der Lizenz des bis dato genutzten BitKeeper-Systems verloren die Linux-Kernel-Entwickler ihren kostenfreien Zugang. Das neue System sollte ähnliche Arbeitsabläufe wie BitKeeper und Sicherheit gegen unbeabsichtigte und mutwillig herbeigeführte Änderungen bieten und zudem eine hohe Effizienz gewähren. Bereits nach wenigen Tagen präsentierte Thorvalds die erste Version von Git.
Hinter Git steckt ein verteiltes Versionsverwaltungssystem. Es existiert zwar ein zentrales Repository, in welches sämtliche Änderungen einfließen, allerdings laden sich alle Benutzer ihre eigene Arbeitskopie herunter. Dadurch haben sie das gesamte Repository inklusive der Historie lokal vorliegen und sind nicht auf eine durchgehende Verbindung zum Netzwerk angewiesen; zudem werden die Änderungen sehr schnell ins Haupt-Repository übertragen. Entsprechend bietet Git daher kein Lock-System, sondern jeder User erzeugt seine eigenen Branches, die dann ins Haupt-Repository hochgeladen werden. Jeder Nutzer hat außerdem standardmäßig Lese- und Schreibberechtigung für das gesamte Verzeichnis (sollen dennoch unterschiedliche Berechtigungen existieren, müssen unterschiedliche Hauptverzeichnisse angelegt werden). Jede Arbeitskopie ist ein eigenständiges Back-up des Hauptverzeichnisses, was von Vorteil ist, wenn dieses ausfällt oder beschädigt ist. Git zeichnet nur die Inhalte von Verzeichnissen auf, weshalb leere Verzeichnisse automatisch gelöscht werden.
Hinter Git steckt ein verteiltes Versionsverwaltungssystem. Es existiert zwar ein zentrales Repository, in welches sämtliche Änderungen einfließen, allerdings laden sich alle Benutzer ihre eigene Arbeitskopie herunter. Dadurch haben sie das gesamte Repository inklusive der Historie lokal vorliegen und sind nicht auf eine durchgehende Verbindung zum Netzwerk angewiesen; zudem werden die Änderungen sehr schnell ins Haupt-Repository übertragen. Entsprechend bietet Git daher kein Lock-System, sondern jeder User erzeugt seine eigenen Branches, die dann ins Haupt-Repository hochgeladen werden. Jeder Nutzer hat außerdem standardmäßig Lese- und Schreibberechtigung für das gesamte Verzeichnis (sollen dennoch unterschiedliche Berechtigungen existieren, müssen unterschiedliche Hauptverzeichnisse angelegt werden). Jede Arbeitskopie ist ein eigenständiges Back-up des Hauptverzeichnisses, was von Vorteil ist, wenn dieses ausfällt oder beschädigt ist. Git zeichnet nur die Inhalte von Verzeichnissen auf, weshalb leere Verzeichnisse automatisch gelöscht werden.
SVN vs. Git: Die Systeme im direkten Vergleich
Ist nun SVN oder Git die bessere Wahl? Eine pauschale Antwort darauf gibt es nicht. Es hängt davon ab, welches Versionsverwaltungssystem für Ihre Zwecke am geeignetsten ist. Beide Systeme unterscheiden sich in ihrer Struktur und dem daraus resultierenden Arbeitsprozess. Die folgende Tabelle fasst die wichtigsten Unterschiede für Sie zusammen:
Das sind die jeweiligen Vorteile der beiden Systeme:
Git sollten Sie immer dann bevorzugen, wenn Sie:
SVN | Git | |
---|---|---|
Versionsverwaltung | zentral | verteilt |
Repository | ein zentrales Repository, in dem Arbeitskopien erzeugt werden | lokal vorliegende Repository-Kopien, in denen gearbeitet wird |
Zugangsberechtigung | pfadbasiert | für das gesamte Verzeichnis |
Änderungsverfolgung | zeichnet Dateien auf | zeichnet Inhalte auf |
Änderungshistorie | nur im Repository komplett, Arbeitskopien enthalten nur neueste Version | Repository und Arbeitskopien enthalten die komplette Historie |
Netzwerkanbindung | bei jedem Zugriff | nur zur Synchronisation notwendig |
Git sollten Sie immer dann bevorzugen, wenn Sie:
- nicht auf eine dauerhafte Netzwerkverbindung angewiesen sein wollen, um überall an Ihrem Projekt arbeiten zu können.
- im Falle eines Ausfalls oder Verlusts des Haupt-Repositorys abgesichert sein wollen.
- keinerlei Lese- und Schreibberechtigung für spezielle Verzeichnisse benötigen (wobei diese auf komplexem Weg auch mit Git eingerichtet werden können).
- Wert auf eine sehr schnelle Übertragung der Änderungen legen.
- pfadbasierte Zugangsberechtigungen für verschiedene Bereiche Ihres Projektes benötigen.
- Ihre gesamte Arbeit an einem zentralen Ort bündeln möchten.
- mit vielen großen Binär-Dateien arbeiten.
- auch die Strukturen leerer Verzeichnisse vollständig aufzeichnen möchten (Git verwirft diese, da sie keinerlei Inhalt besitzen).