Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Apache Subversion

Apache Subversion (SVN) ist eine freie Software zur zentralen Versionsverwaltung von Dateien und Verzeichnissen. Apache Subversion. Subversion-Logo.

Inhalt6 Abschnitte
  1. 1. Überblick und Einsatz
  2. 2. Revisionen für das ganze Projekt
  3. 3. Arbeitskopien, Änderungen und Export
  4. 4. Kopien, Branches und Tags
  5. 5. Verzeichnisse, Metadaten und Dateien
  6. 6. Zugriff, Speicherung und Unterschiede zu CVS

Überblick und Einsatz

Apache Subversion (SVN) ist freie Software zur zentralen Versionsverwaltung von Dateien und Verzeichnissen. Sie speichert die gemeinsamen Arbeitsstände eines Projekts in einem zentralen Projektarchiv, dem Repositorium. Bearbeitende laden daraus eine Arbeitskopie herunter, ändern Dateien lokal und übertragen ihre Änderungen anschließend zurück.

Das System ist wichtig, weil es frühere Stände eines gesamten Projekts nachvollziehbar macht und die Zusammenarbeit mehrerer Personen ermöglicht. Zwischen Repositorium und Arbeitsplatz werden dabei nur Unterschiede zu schon vorhandenen Ständen übertragen. Subversion wurde seit Anfang 2000 bei CollabNet entwickelt und ist seit dem 17. Februar 2010 ein Top-Level-Projekt der Apache Software Foundation. Es steht unter einer Lizenz im Stil der Apache-Lizenz. Die aktuelle stabile LTS-Version des 1.14.x-Zweigs ist 1.14.5 vom 8. Dezember 2024.

Revisionen für das ganze Projekt

Subversion vergibt keine voneinander unabhängigen Versionsnummern für einzelne Dateien, sondern eine Revisionsnummer für das gesamte Repositorium. Jeder Commit, also das Speichern einer Änderung im Repositorium, erzeugt eine neue Revision. Dadurch kann ein vollständiger Projektstand eindeutig bezeichnet werden, etwa als „Revision 2841“.

Die Revisionsnummer einer Datei ist die Revision des Repositoriums, in der diese Datei zuletzt geändert wurde. Bei Verzeichnissen ist sie die höchste Revisionsnummer aller enthaltenen Dateien und Verzeichnisse. Deshalb sind die Revisionsnummern einer einzelnen Datei oft nicht lückenlos: Wurde sie in Revision 40 hinzugefügt und nur in Revision 48 und 52 geändert, besitzt sie diese drei relevanten Stände. Fordert man Revision 51 an, liefert Subversion den Inhalt aus Revision 48; bei Revision 52 den Inhalt aus Revision 52.

Dieses Modell fasst zusammengehörige Änderungen über mehrere Dateien in einer gemeinsamen Revision zusammen. Commits sind außerdem atomar: Eine Änderung an einer oder mehreren Dateien wird entweder vollständig oder gar nicht gespeichert. Verbindungsabbrüche oder gleichzeitige Zugriffe führen dadurch nicht zu einem inkonsistenten Projektzustand.

Arbeitskopien, Änderungen und Export

Bei Checkout, Update und Commit legt Subversion auf dem Client eine Kopie der Ausgangsversion im Verzeichnis .svn ab. Eine Arbeitskopie benötigt daher ungefähr doppelt so viel Speicher. Dafür lassen sich lokale Änderungen ohne Netzwerkzugriff anzeigen, mit der Basisversion vergleichen oder zurücknehmen. Beim Übertragen müssen nur die geänderten Teile einer Datei gesendet werden.

Ein Checkout enthält die Dateien zusammen mit den .svn-Metadaten und ist zum Weiterarbeiten gedacht. Ein Export schreibt dagegen nur die Dateien ohne diese Metadaten ins Dateisystem. Das ist beispielsweise sinnvoll, wenn Dateien auf einem Produktivsystem bereitgestellt werden sollen.

Subversion kann Änderungen auch dann sinnvoll zusammenführen, wenn Dateien kopiert wurden. Bei einer sogenannten „billigen Kopie“ werden die Dateien nicht vollständig dupliziert; stattdessen wird intern eine Verknüpfung angelegt. Original und Kopie teilen dadurch ihren bisherigen Bearbeitungsverlauf, was das Übertragen von Änderungen zwischen ihnen erleichtert.

Kopien, Branches und Tags

Umbenennungen und Verschiebungen setzt Subversion als Kopie mit anschließender Löschmarkierung des Originals um. Anders als bei CVS bleibt der Versionsverlauf dabei erhalten. Eine native Unterstützung für Verschiebung und Umbenennung war auf Entwicklerseite als mittelfristiges Ziel genannt.

Subversion kennt keine eigene, feste Semantik für Tags und Branches. Jede billige Kopie kann je nach Verwendung den Charakter eines Tags oder eines Branches haben. Ein Tag ist üblicherweise eine Kopie, die später nicht mehr verändert werden soll; ein Branch ist ein alternativer Entwicklungspfad. Die Ordnung dieser Kopien liegt bei Benutzern und Administratoren.

Als bewährte Projektstruktur gelten die Basisverzeichnisse trunk, branches und tags. trunk enthält die Hauptentwicklungslinie, branches enthält Unterverzeichnisse für alternative Entwicklungspfade, und tags enthält Kopien von trunk oder einem Branch. HEAD bezeichnet die neueste Version innerhalb eines Branches. Da ein Tag oder Branch nur eine Kopie im Dateisystem ist, erzeugt seine Erstellung einen Commit. Regeln wie unveränderliche Tags müssen durch Arbeitsdisziplin oder serverseitige Skripte durchgesetzt werden.

Verzeichnisse, Metadaten und Dateien

Anders als CVS, SCCS, RCS oder Git verwaltet Subversion nicht nur Dateien, sondern auch Verzeichnisse als eigene Inhalte. Leere Verzeichnisse können daher eingecheckt und ausgecheckt werden. Sie verschwinden nicht automatisch, sondern müssen ausdrücklich als gelöscht markiert werden.

Metadaten sind zusätzliche Eigenschaften, die intern in der Datenbank statt im Verzeichnisbaum gespeichert werden. Sie können etwa Dateien zum Ignorieren kennzeichnen, Dateien als ausführbar markieren oder Merge-Informationen enthalten. Auch frei gewählte Werte sind möglich. Änderungen an Metadaten werden wie Inhaltsänderungen eingecheckt und erhöhen die Revisionsnummer. Teilweise werden Metadaten kritisiert, weil sie je nach Client wenig sichtbar sind und teilweise automatisch von Subversion gesetzt werden.

Binärdateien wie Bilder oder Audiodateien erkennt Subversion weitgehend automatisch; auch für sie werden nur Unterschiede zwischen Versionen gespeichert. Bereits eingecheckte Dateien können als gelöscht markiert werden, bleiben jedoch einschließlich ihrer gesamten Historie im Repositorium. Ein vollständiges Entfernen samt Versionsgeschichte entspricht nicht den Grundsätzen von Subversion und ist nur mit großem administrativem Aufwand möglich.

Für Dateinamen und Logbuch-Einträge legt Subversion selbst eine Zeichenkodierung fest. Damit können beispielsweise Umlaute zwischen CP1252 unter deutschsprachigem Windows und UTF-8 unter Linux verwendet werden. Auf macOS können jedoch Probleme entstehen, wenn Zeichen wie Umlaute in UTF-8 sowohl composed als auch decomposed gespeichert werden können.

Zugriff, Speicherung und Unterschiede zu CVS

Ab Version 1.1.0 benötigt die Basisinstallation nur die Apache Portable Runtime-Bibliothek. Repositorien können mit dem FSFS-Backend direkt im Dateisystem gespeichert werden; das alternative Berkeley-Datenbank-Backend kann wegen binärer Inkompatibilitäten und Stabilitätsproblemen Anpassungen eines älteren Repositoriums nötig machen. Zugriffe über NFS und Windows-Netzwerkfreigaben sind damit nicht möglich.

Der Zugriff ist lokal oder über einen Server möglich. Mit dem Apache-2-Webserver und WebDAV werden Repositorien per HTTP oder HTTPS angesprochen und können in der aktuellen Version auch mit einem gewöhnlichen Browser durchsucht werden. Apache 2 und Neon sind dafür erforderlich; ab Version 1.4 kann Serf statt Neon verwendet werden. Ein eigener, Apache-unabhängiger Server nutzt ein für Subversion optimiertes Protokoll auf Standard-Port 3690; mit SSH sind verschlüsselte Übertragung und geschützte Authentifizierung möglich.

Gegenüber CVS speichert Subversion projektweite Revisionen statt unabhängiger Datei-Historien. CVS kann den Zusammenhang etwa zwischen einer Änderung von foo.h auf Version 1.5 und foo.c auf Version 1.9 nicht direkt abbilden. CVS berechnet Änderungen serverseitig und überträgt jeweils die gesamte Datei. Für Binärdateien müssen dort Dateiendungen in cvswrapper eingetragen werden, und jede Version wird vollständig gespeichert. Außerdem verliert CVS bei Umbenennungen und Verschiebungen den Versionsverlauf.

Weiterlesen

Versionsverwaltung Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv … Concurrent Versions System Concurrent Versions System (CVS) ist ein Software-System zur Versionsverwaltung von Dateien, das hauptsächlich im Zusammenhang mit Software-Quelltext verwendet … Programmierschnittstelle Im Gegensatz zu einer Binärschnittstelle (ABI) definiert eine Programmierschnittstelle nur die Programmanbindung auf Quelltext-Ebene. Die Bereitstellung einer … Parameter (Informatik) Parameter – (deutsch) auch Übergabewerte genannt – sind in der Informatik Variablen, durch die ein Computerprogramm (oft ein Unterprogramm) auf die … Secure Hash Algorithm Der Begriff Secure Hash Algorithm (kurz SHA, englisch für sicherer Hash-Algorithmus) bezeichnet eine Gruppe standardisierter kryptologischer Hashfunktionen. Zeiger (Informatik) Mit Zeiger (englisch pointer) wird in der Informatik ein Objekt einer Programmiersprache bezeichnet, das eine Speicheradresse zwischenspeichert. Tag (Informatik) Ein Tag (ausgesprochen [tæg]; aus englisch tag entlehnt, für Etikett, Mal, [Ab-]Zeichen, Auszeichner, Anhänger oder Schildchen) ist eine Auszeichnung eines … Git Git [ɡɪt] ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde. Mercurial Mercurial ist ein plattformunabhängiges, verteiltes Versionskontrollsystem zur Software-Entwicklung. Es wird nahezu vollständig in Python entwickelt: lediglich … Mengenlehre Dieser Artikel befasst sich mit der mathematischen Theorie der Mengen; eine erste Einführung in die Begriffe der Mengenlehre findet sich unter Menge (Mathematik) … Server Ein Server als Software ist ein Programm, das im Client-Server-Modell mit einem anderen Programm, dem Client (englisch für Kunde), kommuniziert. · Ein Hardware- … Secure Shell Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke.