Apache Subversion

freie Software zur Versionsverwaltung von Dateien und Verzeichnissen
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. Juni 2006 um 15:39 Uhr durch 192.76.162.8 (Diskussion) (Graphische Benutzeroberflächen). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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 bei den meisten Befehlen lediglich das cvs durch svn ersetzt werden 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. Verschiedene kostenfreie Import-Werkzeuge (PVCS, VSS, ClearCase, MKS, Perforce …) sind ebenfalls erhältlich. Subversion wurde unter einer Lizenz im Stil der Apache-Lizenz veröffentlicht.

Subversion

Basisdaten

Entwickler CollabNet
Erscheinungsjahr 20. Oktober 2000[1]
Aktuelle Version 1.3.2
(31. Mai 2006)
Betriebssystem Linux, Windows, Mac OS X
Programmier­sprache C[2][3], Python[2], C++[2], Java[2], Ruby[2], Perl[2]
Kategorie Versionsverwaltung
Lizenz Apache/BSD
deutschsprachig nein
subversion.tigris.org

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. Seit dem 1. Januar 2006 existiert die Version 1.3, die in den Bereichen Server-Logging, Autorisierung, Programmiersprachen-Anbindungen, Kommando-Optionen und Performance Verbesserungen bietet.

Die Entwickler favorisieren regelmäßige Ausgaben der Software, die nicht auf das Fertigwerden bestimmter Features warten. Dadurch können Minor Releases mitunter auch nur Detailverbesserungen enthalten.

Unterschiede zu CVS

Das Versionsschema von Subversion bezieht sich nicht mehr auf einzelne Dateien, sondern auf das ganze Repository. Somit kann man einfacher und im Gegensatz zu CVS, konsistent eine exakte Version beschreiben (z. B. „Version 2841“ statt „Version vom 23. März 2004 20:56:31 UTC“). 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) Client-seitig eine zweite Kopie jeder Datei. Dadurch verdoppelt sich der Speicherbedarf einer Arbeitskopie, 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 muss beim Commit nur die geänderten Teile einer Datei übertragen, während CVS die Änderungen Server-seitig berechnet und somit jeweils die gesamte Datei übertragen muss.

Neben dem geänderten Datenbank-Modell sticht das zu CVS völlig unterschiedliche Konzept im Bereich des Tagging und Branching hervor. Während Tags und Branches in CVS eine klare semantische Bedeutung haben, kennt Subversion nur das Konzept der Kopie, die je nach Nutzungsart Tag- oder Branch-Charakter haben kann. Bei der Erstellung einer Kopie wird dabei nicht wirklich eine Duplizierung der Daten vorgenommen, sondern es wird eine datenbankinterne Verknüpfung angelegt, die im weiteren Verlauf genauso weiter verwendet werden kann wie das Original („billige Kopie“). Jede Kopie in Subversion ist demnach automatisch ein Branch dieser Datei oder des Verzeichnisses. Tags entstehen in Subversion, wenn man eine solche Kopie anlegt und später auf ihr keine Änderungen mehr vornimmt. Aufgrund des Fehlens einer Tag- und Branch-Semantik obliegt die Strukturierung und Verwaltung von Tags und Branches dem Benutzer und Administrator. Dabei hat sich bewährt, für Projekte die Basisverzeichnisse trunk, branches und tags anzulegen. trunk enthält dabei den Letztstand des Projekts, in branches werden weitere Unterverzeichnisse mit alternativen Entwicklungspfaden verwaltet, und in tags wird für jeden Tag ein Unterverzeichnis als Kopie von trunk oder einem der branches angelegt. Zur besseren Übersicht werden je nach Projektanforderungen tags und branches noch in weitere Unterverzeichnisse unterteilt.

Da Dateien in Subversion auch versionskontrolliert umbenannt werden können, kann die Projektstruktur jederzeit gestiegenen oder gesunkenen Anforderungen angepasst werden.

Vorteile

  • 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 und über eine einfache eingebaute Oberfläche mit einem gewöhnlichen Webbrowser angesehen werden können.
  • Einige Operationen (update, tagging, branching) sind deutlich schneller als bei CVS.
  • Subversion verwaltet das gesamte Repository in einer Datenbank (Berkeley DB oder „fsfs“), deren Dateien nicht die Struktur des Repository-Inhalts widerspiegelt. Die Integrität der Datenbank lässt sich so verzeichnisübergreifend überprüfen.

Nachteile

  • 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. Zudem ist der Zugriff über NFS dann nicht sicher möglich.
  • Durch das Fehlen einer Semantik für Tags ist bei gehobenen Ansprüchen an das Versionskontrollsystem die Angabe der Revisionsnummer als Referenz, beispielsweise beim Bug-Tracking oder in der Dokumentation, unabdingbar. Die Verwendung von Server-seitigen Scripts kann steuern, ob, wie und von wem erstellte Tags modifiziert werden können.

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 Repositorys 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 im Vergleich zu anderen Systemen, wie beispielsweise CVS.

Graphische Benutzeroberflächen

Obwohl Subversion noch nicht lange existiert, gibt es bereits ausgereifte graphische Benutzeroberflächen. Dazu zählen beispielsweise SmartSVN (klassische Projektdarstellung mit Verzeichnisbaum und Dateitabelle) und TortoiseSVN (Windows-Explorer-Integration). Beide erwähnten Programme machen es den Benutzern der zugehörigen CVS-Clients SmartCVS und TortoiseCVS besonders leicht, ohne großen Einarbeitungsaufwand auf Subversion zu wechseln. Für MacOS X existieren GUIs als eigenständiges Programm in svnX oder als Finder-Integration in scplugin. Weiterhin sind Plugins für Eclipse verfügbar: Subclipse und Subversive SVN.

Ein reiner Web-basierter Server-Dienst ist Insurrection, das die von Subversion mitgelieferte Browser-Darstellung um eine interaktive History-Darstellung und RSS-Feeds erweitert.

  1. subversion.apache.org.
  2. a b c d e f The subversion Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 29. Dezember 2023).
  3. projects.apache.org. (abgerufen am 8. April 2020).