Zum Inhalt springen

Apache Subversion

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 2. Dezember 2006 um 13:26 Uhr durch Nyks (Diskussion | Beiträge) (Nachteile). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Subversion

Basisdaten

Entwickler CollabNet
Erscheinungsjahr 20. Oktober 2000[1]
Aktuelle Version 1.4.2
(7. November 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 ja
subversion.tigris.org

Subversion (SVN) ist eine Open-Source-Software zur Versionsverwaltung. Es wurde als moderne Ablösung für das mit vielen Schwächen behaftete, in Entwicklerkreisen trotzdem noch sehr verbreitete Programm CVS entwickelt. Deshalb ist es mit Bedacht in der Bedienung sehr ähnlich gehalten, 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, Visual Source Safe, ClearCase, MKS, Perforce …) sind ebenfalls erhältlich. 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 Repositorys 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. Am 10. September 2006 wurde Version 1.4 veröffentlicht, sie bringt das Programm svnsync mit, welches das Spiegeln von Repositorys ermöglicht.

Entwickler, die nicht auf das Fertigwerden bestimmter Features warten, favorisieren regelmäßige Ausgaben der Software. 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.

Tag- und Branchkonzept

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 keine Duplizierung der Daten vorgenommen, sondern 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

  • Subversion wird seit etwa 7 Jahren entwickelt, CVS allerdings ist durch über 20 Jahre Weiterentwicklung sehr ausgereift.
  • 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 aufgezwungenen 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 serverseitigen Scripts kann steuern, ob, wie und von wem erstellte Tags modifiziert werden können.
  • Einmal eingecheckte Dateien lassen sich nur noch mit großem Aufwand, teilweise sogar mit der Gefahr, das Repository zu zerstören, entfernen[4]. Für die Zukunft ist eingeplant das Kommando svnadmin obliterate zu implementieren, welches ein sicheres und komplettes Löschen ermöglichen soll[5].

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 bei 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 (Subclipse und Subversive SVN) und Microsoft Visual Studio (AnkhSVN) verfügbar.

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

Quellen

  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).
  4. Subversion-Bugtracker: Issue 516, 4. Oktober 2001
  5. Subversion FAQ: How do I completely remove a file from the repository's history?, 3. August 2006