Um Än­de­run­gen an Do­ku­men­ten oder Dateien zu erfassen, exis­tie­ren so­ge­nann­te Ver­si­ons­ver­wal­tungs­sys­te­me. Diese speichern alle durch Be­ar­bei­tung ent­stan­de­nen Versionen inklusive Zeit­stem­pel und Be­nut­zer­ken­nung in einem Archiv, sodass frühere Stände einzelner Daten jederzeit abgerufen oder wie­der­her­ge­stellt werden können. Dadurch lässt sich nach­voll­zie­hen, welcher Nutzer zu einem be­stimm­ten Zeitpunkt Än­de­run­gen vor­ge­nom­men hat. Die über­ge­ord­ne­ten Ziele eines solchen Systems liegen darin, den ge­mein­sa­men Zugriff mehrerer Nutzer auf die Dateien zu ko­or­di­nie­ren und die gleich­zei­ti­ge Ent­wick­lung mehrerer Branches (Ent­wick­lungs­zwei­ge bzw. Ab­spal­tun­gen) zu er­mög­li­chen. Ty­pi­scher­wei­se kommen Ver­si­ons­ver­wal­tungs­sys­te­me in der Software-Ent­wick­lung, bei Bü­ro­an­wen­dun­gen und in Content-Ma­nage­ment-Systemen zum Einsatz. Zu den be­kann­te­ren Pro­gram­men für die Ver­si­ons­ver­wal­tung zählen Apache Sub­ver­si­on (SVN) und Git. Diese kann man entweder auf dem eigenen Server in­stal­lie­ren oder bei einem Hoster anmieten. Der be­kann­tes­te web­ba­sier­te Hosting-Dienst für Git-Projekte ist GitHub; Sub­ver­si­on-Hosting wird z. B. von RiouxSVN angeboten. Dienste wie SourceF­or­ge hosten beide Systeme.

SVN: Der CVS-Nach­fol­ger von CollabNet

Die freie Software Sub­ver­si­on wurde seit Anfang 2000 von CollabNet ent­wi­ckelt und rund vier Jahre später in einer ersten Version ver­öf­fent­licht. Damit trat SVN die Nachfolge des mitt­ler­wei­le nicht mehr betreuten Vorbilds CVS (Con­cur­rent Versions System) an. 2009 wechselte das Projekt zur Apache Software Foun­da­ti­on, wodurch es den heutigen Namen Apache Sub­ver­si­on erhielt.

SVN greift auf ein zentrales System zur Ver­si­ons­ver­wal­tung zurück. Das heißt, dass ein allgemein gültiges Ver­zeich­nis (Re­po­si­to­ry) existiert, auf das alle Nutzer zugreifen. Da gemachte Än­de­run­gen nicht mit­ein­an­der ver­schmol­zen werden können, ver­hin­dert das System, dass zwei User gleich­zei­tig dieselbe Datei be­ar­bei­ten. Dazu wird diese dem ersten Benutzer, der auf sie zugreift, zu­ge­wie­sen und während der Be­ar­bei­tungs­dau­er für andere als schreib­ge­schützt markiert. Apache Sub­ver­si­on bietet zu­sätz­lich auch die Mög­lich­keit, dass beliebige Un­ter­pfa­de un­ab­hän­gig vom Rest des Pfadbaums her­un­ter­ge­la­den und be­ar­bei­tet werden können. Dadurch lassen sich den ver­schie­de­nen Nutzern un­ter­schied­li­che Lese- und Schreib­rech­te für sämtliche Pfade zuweisen. Ferner zeichnet sich Sub­ver­si­on dadurch aus, auch leere, um­be­nann­te und ver­scho­be­ne Ver­zeich­nis­se ohne Verlust ihrer Historie pro­blem­los auf­zu­zeich­nen.

Git: Die Notlösung der Linux-Kernel-Ent­wick­ler

Linux-Schöpfer Linus Thorvalds begann im April 2005 – mehr oder weniger un­frei­wil­lig – mit der Ent­wick­lung einer neuen Software zur Ver­si­ons­ver­wal­tung. Der Grund: Durch eine Änderung der Lizenz des bis dato genutzten BitKeeper-Systems verloren die Linux-Kernel-Ent­wick­ler ihren kos­ten­frei­en Zugang. Das neue System sollte ähnliche Ar­beits­ab­läu­fe wie BitKeeper und Si­cher­heit gegen un­be­ab­sich­tig­te und mutwillig her­bei­ge­führ­te Än­de­run­gen bieten und zudem eine hohe Effizienz gewähren. Bereits nach wenigen Tagen prä­sen­tier­te Thorvalds die erste Version von Git.

Hinter Git steckt ein ver­teil­tes Ver­si­ons­ver­wal­tungs­sys­tem. Es existiert zwar ein zentrales Re­po­si­to­ry, in welches sämtliche Än­de­run­gen ein­flie­ßen, al­ler­dings laden sich alle Benutzer ihre eigene Ar­beits­ko­pie herunter. Dadurch haben sie das gesamte Re­po­si­to­ry inklusive der Historie lokal vorliegen und sind nicht auf eine durch­ge­hen­de Ver­bin­dung zum Netzwerk an­ge­wie­sen; zudem werden die Än­de­run­gen sehr schnell ins Haupt-Re­po­si­to­ry über­tra­gen. Ent­spre­chend bietet Git daher kein Lock-System, sondern jeder User erzeugt seine eigenen Branches, die dann ins Haupt-Re­po­si­to­ry hoch­ge­la­den werden. Jeder Nutzer hat außerdem stan­dard­mä­ßig Lese- und Schreib­be­rech­ti­gung für das gesamte Ver­zeich­nis (sollen dennoch un­ter­schied­li­che Be­rech­ti­gun­gen exis­tie­ren, müssen un­ter­schied­li­che Haupt­ver­zeich­nis­se angelegt werden). Jede Ar­beits­ko­pie ist ein ei­gen­stän­di­ges Back-up des Haupt­ver­zeich­nis­ses, was von Vorteil ist, wenn dieses ausfällt oder be­schä­digt ist. Git zeichnet nur die Inhalte von Ver­zeich­nis­sen auf, weshalb leere Ver­zeich­nis­se au­to­ma­tisch 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 Ver­si­ons­ver­wal­tungs­sys­tem für Ihre Zwecke am ge­eig­nets­ten ist. Beide Systeme un­ter­schei­den sich in ihrer Struktur und dem daraus re­sul­tie­ren­den Ar­beits­pro­zess. Die folgende Tabelle fasst die wich­tigs­ten Un­ter­schie­de für Sie zusammen:

SVNGit
Ver­si­ons­ver­wal­tungzentralverteilt
Re­po­si­to­ryein zentrales Re­po­si­to­ry, in dem Ar­beits­ko­pien erzeugt werdenlokal vor­lie­gen­de Re­po­si­to­ry-Kopien, in denen ge­ar­bei­tet wird
Zu­gangs­be­rech­ti­gungpfad­ba­siertfür das gesamte Ver­zeich­nis
Än­de­rungs­ver­fol­gungzeichnet Dateien aufzeichnet Inhalte auf
Än­de­rungs­his­to­rienur im Re­po­si­to­ry komplett, Ar­beits­ko­pien enthalten nur neueste VersionRe­po­si­to­ry und Ar­beits­ko­pien enthalten die komplette Historie
Netz­werk­an­bin­dungbei jedem Zugriffnur zur Syn­chro­ni­sa­ti­on notwendig

Das sind die je­wei­li­gen Vorteile der beiden Systeme:

Git sollten Sie immer dann be­vor­zu­gen, wenn Sie:

  • nicht auf eine dau­er­haf­te Netz­werk­ver­bin­dung an­ge­wie­sen sein wollen, um überall an Ihrem Projekt arbeiten zu können.
  • im Falle eines Ausfalls oder Verlusts des Haupt-Re­po­si­to­rys ab­ge­si­chert sein wollen.
  • keinerlei Lese- und Schreib­be­rech­ti­gung für spezielle Ver­zeich­nis­se benötigen (wobei diese auf komplexem Weg auch mit Git ein­ge­rich­tet werden können).
  • Wert auf eine sehr schnelle Über­tra­gung der Än­de­run­gen legen.

Sub­ver­si­on ist die bessere Wahl, wenn Sie:

  • pfad­ba­sier­te Zu­gangs­be­rech­ti­gun­gen für ver­schie­de­ne 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 Struk­tu­ren leerer Ver­zeich­nis­se voll­stän­dig auf­zeich­nen möchten (Git verwirft diese, da sie keinerlei Inhalt besitzen).

Sind die auf­ge­zähl­ten Features für Sie nicht von ent­schei­den­der Relevanz, empfiehlt sich ein Test beider Ver­si­ons­ver­wal­tungs­sys­te­me. Die Un­ter­stüt­zung durch eine große Community, erst­klas­si­ge Hosting-Anbieter wie GitHub sowie pro­fes­sio­nel­le Support-Angebote sind Ihnen in beiden Fällen sicher.

Zum Hauptmenü