|
Subversion (SVN) ist eine Open-Source-Software zur Versionsverwaltung von Dateien und Verzeichnissen. Die Versionierung erfolgt in einem zentralen Projektarchiv (engl. Repository) in Form einer einfachen Revisionszählung. Wenn Änderungen an Inhalten verteilt auf den Computern der Bearbeiter ausgeführt werden, werden zwischen dem Projektarchiv und einem Arbeitsplatz jeweils nur die Unterschiede zu bereits vorhandenen Ständen übertragen; anfangs das gesamte Projekt, später nur Änderungen.
AllgemeinesSubversion wird 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 aber weiterhin sehr verbreitete Programm CVS entwickelt. Deshalb ist es in der Bedienung sehr ähnlich gehalten, behebt aber einige Schwächen von CVS. So ist es mit Subversion z. B. möglich, Dateien oder Verzeichnisse zu verschieben oder umzubenennen, ohne die Versionsgeschichte zu verlieren. Dies wird im Abschnitt Unterschiede zu CVS vertieft. 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, StarTeam, …) sind verschiedene kostenfreie Import-Werkzeuge erhältlich. GeschichteSubversion 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 Projektarchive (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 Leistung („Performance“) Verbesserungen bietet. Am 10. September 2006 wurde Version 1.4 veröffentlicht, sie bringt das Programm svnsync mit, welches das Spiegeln von Projektarchiven (Repositories) ermöglicht. Unterschiede zu CVSDer entscheidende Unterschied zwischen CVS und SVN liegt in der Rangfolge von örtlicher (L) und zeitlicher (T) Kennzeichnung der Inhalte eines Projektarchivs (P): während in CVS primär örtlich, sekundär zeitlich adressiert wird (P:L.T), werden in SVN die Koordinaten umgekehrt (P:T.L). SVN bildet die erfahrungsgemäße Realität von Veränderungen damit anschaulicher nach: jede Veränderung benötigt Zeit, und ihre Endpunkte sind das Vorher (Revision vor Änderung) und das Nachher (Revision nach der Änderung). SVN versioniert oder revisioniert also grundsätzlich das gesamte Projektarchiv und damit jeweils die gesamte Verzeichnisstruktur, während CVS auf der unabhängigen Versionierung jedes einzelnen Inhalts beruht. Das Versionsschema von Subversion bezieht sich nicht mehr auf einzelne Dateien, sondern jeweils auf das ganze Projektarchiv, mit jeder Änderung bekommt es eine neue „Revisionsnummer“ zugeordnet. Somit kann man einfacher – und im Gegensatz zu CVS konsistent – eine exakte Version beschreiben (z. B. „Revision 2841“ statt „Version vom 23. März 2004 20:56:31 UTC“). Die Revisionsnummer einer Datei entspricht dabei der Revisionsnummer des Projektarchivs, als sie das letzte Mal geändert wurde, die Revisionsnummer eines Verzeichnisses entspricht der höchsten Revisionsnummer der enthaltenen Dateien und Verzeichnisse. Die Abfolge der Revisionsnummern einer einzelnen Datei kann also durchaus lückenhaft sein, wenn die Datei nicht bei jedem Commit am Repository geändert wurde. Beispielsweise könnte eine Datei bei der Revision 25 zum Projektarchiv 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 Inhalte von Revision 48. Subversion speichert Client-seitig bei Checkout, Update und Commit in einem gesonderten Verzeichnis ( 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. KopienCVS ist nicht in der Lage, Kopien von Dateien zu verwalten; jede 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.[1] Tag- und BranchkonzeptNeben 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 die Hauptentwicklungslinie 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. Als head bezeichnet man die Toprevision innerhalb eines Branches. 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. SonstigesSubversion 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 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 aktuelle 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. [2] Für die Zukunft ist geplant, das Kommando 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 Im Gegensatz zu CVS definiert Subversion die Zeichenkodierung, welche für Dateinamen und Log-Messages im Repository benutzt wird. Damit können beispielsweise auch Dateien mit Umlauten im Namen auf Systemen mit verschiedenen Encodings (z. B. CP1252 (deutschsprachiges Windows), UTF-8 (Linux)) benutzt werden, während dies bei CVS nicht plattformunabhängig funktioniert, da die CVS-Client-Server-Protokoll-Definition dies nicht festlegt. Die aktuelle Subversion-Version hat lediglich Probleme auf Mac OS X, da dessen Dateisystem z. B. Umlaute als zwei Zeichen speichert (etwa »a« + »¨«[4]), während Windows und Linux nur ein Zeichen benutzen (etwa »ä«). Man kann die unter Mac OS X hinzugefügten Dateien zwar unter Windows abrufen, aber die Umlaute bestehen intern dann auch aus zwei Zeichen, werden aber wie „normale“ Umlaute z. B. im Explorer angezeigt. Da man trotzdem Dateien mit „normalen“ Ein-Zeichen-Umlauten anlegen kann, ist es so möglich, zwei gleich aussehende, aber intern vom Namen her unterschiedliche Dateien in einem Verzeichnis unter Windows zu haben. Abhängigkeiten von SubversionFü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 in einer Version von 4.0 oder höher notwendig, was jetzt aber hinfällig ist, da das Repository mit Hilfe des FSFS-Backend optional auch direkt im Dateisystem gespeichert werden kann. Apache 2 und Neon sind für die WebDAV-Nutzung erforderlich, Python 2.x 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. 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. Der Standard-Subversion-Port ist 3690. Grafische BenutzeroberflächenEs gibt einige ausgereifte grafische Benutzeroberflächen (GUI) für Subversion. Sie machen es den Benutzern besonders leicht, auf ein Subversion-Repository zuzugreifen; siehe etwa en:Comparison of Subversion clients. Weiterhin sind Plugins für NetBeans, Eclipse, Code::Blocks, Vim, TYPO3 und Microsoft Visual Studio verfügbar. Die globale Administration (Benutzerrechte, Protokolle, …) erfolgt jedoch weiterhin über spezielle SVN eigene Konfigurationsdateien. Um ein Subversion-Repository lediglich zu betrachten, bieten viele Open-Source-Projekte einen Link auf ihren Webdienst an. Dieser präsentiert in übersichtlicher Form Inhalte von Dateien, Verzeichnissen und Logbüchern, auch Datei-Vergleiche sind möglich. Literatur
Einzelnachweise
Weblinks |
|||||||||||||||||||||||||||||||
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net