Apache Subversion
Subversion
| |
---|---|
![]() | |
Basisdaten
| |
Entwickler | CollabNet |
Erscheinungsjahr | 20. Oktober 2000[1] |
Aktuelle Version | 1.4.4 (9. Juni 2007) |
Betriebssystem | AIX, Linux, Windows, Mac OS X, *BSD, Solaris, OS/400 |
Programmiersprache | 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. Sie wurde als Freie Software unter einer Lizenz im Stil der Apache-Lizenz veröffentlicht. Die Benennung „Subversion“ verweist einerseits auf den politisch-soziologischen Begriff der Subversion und greift andererseits die Bedeutung von sub version im Sinne von Unterversion, früherer Version auf.
Subversion 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, hat dasselbe zentrale Paradigma und behebt die meisten Schwächen von CVS.
Mit cvs2svn existiert ein Konverter, mit dem ein CVS-Repository zu Subversion konvertiert werden kann. Auch für die Migration von anderen Versionsverwaltungs-Systemen (etwa PVCS, Visual Source Safe, ClearCase, MKS, Perforce …) sind verschiedene kostenfreie Import-Werkzeuge erhältlich.
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, deren 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. Commits sind dabei 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.
Kopien
CVS ist nicht in der Lage, Kopien von Dateien zu verwalten, die Kopie wird wie eine komplett neue Datei behandelt. Subversion behält bei Kopien die Historie einer Datei. 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“). Kopien sind insbesondere beim Umbenennen und Verschieben von Dateien interessant. Subversion realisiert dies zwar wie CVS, indem es eine Kopie anlegt und das Original als gelöscht markiert, allerdings kommt es nicht wie in CVS zu einem Bruch in der Historie. Eine native Unterstützung für das Verschieben/Umbenennen ist auf der Website als mittelfristiges Ziel genannt.[4]
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. Jede Kopie in Subversion ist demnach automatisch ein Branch dieser Datei oder des Verzeichnisses. Tags entstehen in Subversion, wenn man eine 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 (engl. Stamm), branches (engl. Verzweigungen) und tags (engl. Markierungen) anzulegen. trunk enthält dabei den Letztstand des Projekts, in branches werden weitere Unterverzeichnisse mit alternativen Entwicklungspfaden verwaltet, und in tags eine Kopie von trunk oder einem der branches als Unterverzeichnis angelegt. Zur besseren Übersicht werden je nach Projektanforderungen tags und branches noch in weitere Unterverzeichnisse unterteilt.
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. Darüber hinaus ist das Branchen und Taggen in Subversion deutlich performanter gelöst als in CVS.
Da Dateien in Subversion auch versionskontrolliert umbenannt werden können, kann die Projektstruktur jederzeit gestiegenen oder gesunkenen Anforderungen angepasst werden.
Sonstiges
Subversion kann auch Verzeichnisse und Metadaten 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 gelöscht werden, sie können nicht ohne Verlust der Historie aller enthaltenen Dateien aus dem Repository gelöscht 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.
Wie CVS bietet Subversion den Netzwerkzugriff über einen eigenen Server, auf den mit SSH auch verschlüsselt zugegriffen werden kann. Zusätzlich hierzu 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. Somit kann die aktuellste Revision einer Datei auch mit einem gewöhnlichen Webbrowser abgerufen werden.
Einmal eingecheckte Dateien lassen sich nur noch mit großem Aufwand, teilweise sogar mit der Gefahr, das Repository zu zerstören, vollständig (mitsamt Versionshistorie) entfernen. [5] Für die Zukunft ist eingeplant das Kommando svnadmin obliterate
zu implementieren, welches ein sicheres und komplettes Löschen ermöglichen soll. [6]
Subversion verwaltet das gesamte Repository in einer Datenbank, deren Dateien nicht die Struktur des Repository-Inhalts widerspiegeln. Die Integrität der Datenbank lässt sich so verzeichnisübergreifend überprüfen. Es stehen dabei aktuell zwei Backends zur Verfügung. Das in der Version 1.1 hinzugefügte fsfs
-Backend verwendet ein eigenes Format. Das andere Backend verwendet das Berkeley-Datenbanksystem, dies hat jedoch den Nachteil, dass die Daten einerseits dessen binären Inkompatibilitäten abhängig von der verwendeten Version unterliegen, 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 und Windows Netzwerkfreigaben dann nicht möglich.
Abhängigkeiten von Subversion
Subversion hängt von einigen Bibliotheken ab, von denen jedoch nur die Apache Portable Runtime zwingend erforderlich ist. Der Standard-Subversion-Port ist 3690.
- Wenn das Repository in einer Berkeley-Datenbank gespeichert werden soll, wird diese in einer Version von 4.0 oder höher benötigt.
- XML-Parser Expat
- Python 2.x
- Apache 2
- OpenSSL oder andere SSL-Implementierung
- Neon
- Serf
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. Seit Version 1.4 kann alternativ auch Serf anstatt neon für WebDAV verwendet werden.
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.
Grafische Benutzeroberflächen
Es gibt einige ausgereifte grafische Benutzeroberflächen (GUI) für Subversion. Beispielsweise die beiden Programme SmartSVN (klassische Projektdarstellung mit Verzeichnisbaum und Dateitabelle) und RapidSVN, welche plattformunabhängig laufen. Beide machen es den Benutzern/-innen besonders leicht, auf ein Subversion Repository zuzugreifen. Für Windows steht beispielsweise TortoiseSVN zur Verfügung, das sich in den Shell-Kontext von Windows integriert. Für Mac OS X existieren GUIs als eigenständiges Programm svnX und ZigVersion oder als Finder-Integration in scplugin. Weiterhin sind Plugins für NetBeans, Eclipse (Subclipse und Subversive) und Microsoft Visual Studio (AnkhSVN, VisualSVN) 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.
Um ein Subversion Repository lediglich zu betrachten, bieten viele OpenSource-Projekte einen Link auf ihren ViewVC-Webdienst an. ViewVC präsentiert in übersichtlicher Form Inhalte von Dateien, Verzeichnissen und Logbüchern, auch Datei-Vergleiche sind möglich.
Weblinks
- Offizielle Website (englisch)
- Subversion-Onlinebuch (englisch)
- Einstieg in Subversion (deutsch)
- 1. Subversion Konferenz in Deutschland (deutsch)
- Vergleich von 13 Versionsverwaltungen (englisch)
- Auflistung von Frontends und sonstigen Clients für Subversion (englisch)
- Einführung in Subversion (PDF)
- Linkkatalog zum Thema Subversion bei curlie.org (ehemals DMOZ)
- https://gna.org, https://opensvn.csie.org oder syncom.org sind Beispiele für kostenlose SVN Server
Konverter
- CVS2SVN Konverter (englisch, OpenSource)
- CVS, PVCS, VSS, ClearCase, MKS, StarTeam Importer for SVN (OpenSource)
- Tailor konvertieren, aktualisieren und synchronisieren von Inhalten diverser Versionskontrollsysteme wie CVS, Darcs, Git, Monotone,... (englisch, OpenSource)
Quellen
- ↑ subversion.apache.org.
- ↑ a b c d e f The subversion Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 29. Dezember 2023).
- ↑ projects.apache.org. (abgerufen am 8. April 2020).
- ↑ Subversion Website: Subversion Roadmap
- ↑ Subversion-Bugtracker: Issue 516, 4. Oktober 2001
- ↑ Subversion FAQ: How do I completely remove a file from the repository's history?, 3. August 2006