Apache Subversion
Subversion (SVN) ist eine Open-Source-Software zur Versionsverwaltung. Da es viele Schwächen des in Entwicklerkreisen sehr beliebten Programms CVS behebt, wird Subversion oft als dessen Nachfolger bezeichnet, obwohl es sich um ein eigenständiges Projekt handelt. Es ist jedoch absichtlich von der Bedienung sehr ähnlich gehalten. CVS-Umsteiger werden es deshalb zu schätzen wissen, dass man bei den meisten Befehlen lediglich das cvs
durch svn
ersetzen muss. Zusätzlich zu vielen neuen Features werden fast alle Funktionen von CVS unterstützt. Mit cvs2svn existiert ein Konverter, mit dem ein CVS-Repository zu Subversion konvertiert werden kann. Subversion wurde unter einer Lizenz im Stil der Apache-Lizenz veröffentlicht.
Geschichte
Subversion wird seit Anfang 2000 bei CollabNet entwickelt und erreichte am 23. Februar 2004 die stabile Version 1.0. Am 29. September 2004 erschien Version 1.1, dessen größte Neuerung war, dass Repositories nicht mehr nur in einer Berkeley-Datenbank verwaltet werden können, sondern dass dazu auch direkt das Dateisystem benutzt werden kann. Außerdem wurden internationalisierte Programmausgaben ermöglicht. Die am 23. Mai 2005 erschienene Version 1.2 unterstützt nun auch optionale Bearbeitungssperren für Dateien, was teilweise für binäre Dateien von Vorteil sein kann.
Unterschiede zu CVS
Das Versionsschema von Subversion bezieht sich nicht mehr auf einzelne Dateien, sondern auf das ganze Repository. Somit kann man einfacher eine exakte Version beschreiben (z. B. "Version 2841" statt "Version vom 23. März 2004 20:56:31 GMT"). Die Revisionsnummer einer Datei entspricht dabei der Revisionsnummer des Repositorys, als sie das letzte mal geändert wurde, die Revisionsnummer eines Verzeichnisses entspricht der höchsten Revisionsnummer der enthaltenen Dateien und Verzeichnisse. Die Revisionsnummern einer einzelnen Datei können also durchaus lückenhaft sein, wenn diese nicht bei jedem Commit geändert wurden. Beispielsweise könnte eine Datei bei der Revision 25 zum Repository hinzugefügt worden sein, und einmal in der Revision 48 und 52 verändert worden sein. Bei einem Checkout einer Datei wird die größte Revisionsnummer ausgecheckt, die kleiner oder gleich der angeforderten ist. Wird in dem Beispiel die Revision 52 angefordert, so wird die Revision 52 der Datei ausgecheckt, wird hingegen die Revision 51 angefordert, liefert Subversion die Revision 48.
Subversion speichert beim Checkout, Update und Commit in einem gesonderten Verzeichnis (.svn
) eine zweite Kopie jeder Datei. Dadurch verdoppelt sich der Speicherbedarf einer Arbeitskopie ungefähr, allerdings bietet dies bei entfernten Repositorys auch einige Vorteile. So können einige Aktionen wie Anzeige der lokalen Änderungen komplett ohne Netzwerkzugriff erfolgen und Subversion kann auch beim Commit nur die geänderten Teile übertragen, während CVS bei der Übertragung zum Server jeweils die gesamte Datei übertragen muss.
Vorteile gegenüber CVS
- In Subversion können Dateien (und Verzeichnisse) auch umbenannt und verschoben werden. In CVS muss eine Datei an der alten Stelle auf "Gelöscht" gesetzt und an der neuen Stelle neu eingefügt werden, wobei die Historie der Datei nicht übernommen wird.
- Subversion kann auch Verzeichnisse und Metadaten wie Dateiberechtigungen verwalten. Insbesondere können Verzeichnisse auch als gelöscht markiert werden. Dies ist mit CVS nicht möglich, hier können nur optional leere Verzeichnisse beim Checkout ignoriert werden.
- Subversion bietet einen verbesserten Umgang mit Binärdaten. Es erkennt solche Dateien (beispielsweise Bilder oder Audiodateien) weitgehend automatisch und es werden (wie bei Textdateien) nur die Differenzen zwischen den geänderten Versionen gespeichert. In CVS geht das umständlicher über Eintrag der Endungen von binären Dateien in
cvswrapper
, verschiedene Versionen von Dateien dieser Typen müssen aber immer voll gespeichert werden. - Commits sind in Subversion atomar, das heißt eine Änderung wird entweder komplett oder gar nicht ins Repository gespeichert. Verbindungsabbrüche und mehrere, gleichzeitige Commits können somit nicht zu inkonsistenten Zuständen führen.
- Zusätzlich zu einem eigenen Server, dem Zugriff via Secure Shell und der Speicherung im lokalen Dateisystem existiert auch ein Modul für den Apache 2 Webserver, mit dem die Daten auch mit der HTTP/HTTPS-Erweiterung WebDAV übertragen werden können.
- Einige Operationen (update, tagging, branching) sind deutlich schneller als bei CVS.
Nachteile gegenüber CVS
- Die gleichen Daten (z.B. nach Konvertierung) benötigen in einem Subversion-Repository deutlich mehr Platz als in einem CVS-Repository.
- Subversion gilt als stabil, allerdings wird CVS bereits rund 20 Jahre verwendet, sollte also noch weniger Bugs enthalten.
- Wenn das Berkeley-Datenbanksystem für Subversion als Repository-Grundlage verwendet wird, unterliegen die Daten einerseits dessen binären Inkompatibilitäten abhängig von der verwendeten Version, und andererseits den damit eingebrachten Stabilitätsproblemen. Dies kann zur Folge haben, dass ein mit einer älteren Version erstelltes Repository auf die neue Version angepasst werden muss.
Anmerkung zur Komplexität von Subversion
Subversion hängt von einigen Bibliotheken ab, von denen jedoch nur die Apache Portable Runtime zwingend erforderlich ist.
- Wenn das Repository in einer Berkeley-Datenbank gespeichert werden soll, wird diese in einer Version >= 4.0 benötigt.
- XML-Parser Expat
- Python 2.x
- Apache 2
- OpenSSL oder andere SSL-Implementierung
- Neon
Nicht alle dieser Komponenten sind unbedingt notwendig: Apache 2 und Neon sind für die WebDAV-Nutzung erforderlich, Python für einige mitgelieferte Test-Skripte, eine SSL-Implementierung wenn man WebDAV verschlüsseln will.
Für eine Installation der Basisfunktionalität muss seit Version 1.1.0 nur die Apache Portable Runtime-Bibliothek vorhanden sein. Zuvor war auch noch eine Berkeley-DB notwendig, was jetzt aber hinfällig ist, da das Repository mit Hilfe des FSFS-Backend optional auch direkt im Dateisystem gespeichert werden kann.
Die Einrichtung eines Repositories besteht – wie beim Vorgänger CVS – aus dem Aufruf eines Befehls. Bei lokalem Zugriff kann man nun sofort loslegen. Will man Subversion als Server konfigurieren, hängt der Aufwand stark von der gewählten Methode ab, ist jedoch ähnlich mit dem anderer Systeme wie CVS.