Die Versionsverwaltung Subversion
Willemers Informatik-Ecke

Client-Einrichtung

Linux-Installation

Der Client für Linux wird bei Debian, Ubuntu und Linux Mint mit dem folgenden Befehl installiert:
# apt install subversion

Windows-Client

Wer noch unter Windows arbeitet, kann die grafische Oberfläche TortoiseSVN nutzen.

Client-Anwendung

Anlegen und Kopieren einer Projektstandes

Anlegen eines Repositories

$ svnadmin create /home/johannes/svn
In das Verzeichnis mit dem Quelltext wechseln und dort den aktuellen Stand als Basis für die Versionsverwaltung speichern.
$ cd ~/src/cpp/meinProjekt
$ svn import file:///home/johannes/svn/meinProjekt -m "Erster Stand"
Die Dateien im Verzeichnis werden hinzugefügt und als Revision 1 übertragen.

Die Option -m ermöglicht die Angabe eines Versionskommentars. Der ist zwingend. Wird er nicht per -m angegeben, wird man aufgefordert diesen direkt am Terminal einzugeben.

Einen Stand auschecken

Soll ein neues Arbeitsverzeichnis angelegt werden, um beispielsweise etwas auszuprobieren, wird ein Checkout durchgeführt.
$ cd ~/tmp/test
$ svn checkout file:///home/johannes/svn/meinProjekt

Arbeiten am Source-Code

Wenn man am Source-Code ändert, kann man sich den Status anzeigen lassen.
$ svn status
?       neu.cpp
M       paint.cpp
Die Datei paint.cpp wurde geändert, die Datei neu.cpp neu angelegt. Subversion weiß allerdings noch nichts davon und wird sie ignorieren.

Neue Datei zum Subversion hinzufügen

Die neue Datei wird zum Status hinzugefügt.
$ svn add neu.cpp
$ svn status
A       neu.cpp
M       paint.cpp
Beim Hinzufügen eines Verzeichnisses werden automatisch alle enthaltenen Dateien zum Repository hinzugefügt.

Dateien aus dem Repository löschen

Durch den Befehl delete oder rm wird eine Datei aus dem Repository entfernt. Gleichzeitig wird auch die lokale Datei gelöscht.
$ svn delete mist.cpp

Vergleich mit dem alten Repository-Stand

Bei der Datei paint.cpp liegen also Änderungen gegenüber dem Stand im Repository vor. Diese kann man sich mit dem folgenden Befehl anzeigen lassen.
$ svn diff neu.cpp

Lesen des aktuellen Stands aus dem Repository

Um ein eigenes Arbeitsverzeichnis gegenüber einem Repository auf den aktuellen Stand zu bringen, wird er per Update aktualisiert.
$ svn update

Übernahme der Änderungen in das Repository

Letztlich sollen die Änderungen natürlich in der Versionskontrolle gespeichert werden. Dazu wird ein Commit durchgeführt.
$ svn commit -m "Farbfehler beseitigt, Schattierung neu"

Rückname der Änderungen

Solange der Stand noch nicht per commit gesichert wurde, können die Aktionen mit dem Befehl revert zurückgenommen werden. Als Argument wird der Dateiname angegeben.
$ svn revert dochkeinmist.cpp

Subversion Server einrichten

Ein zentraler Subversion-Server sollte aus verschiedenen Gründen keinesfalls auf der Basis eines Netzlaufwerkes eingerichtet werden. Stattdessen empfiehlt es sich, den Server auf der Basis des Web-Servers Apache einzurichten. Damit kann Subversion das Protokoll HTTP nutzen.
# apt install apache2
# apt install subversion
# apt install libapache2-svn apache2-mpm-prefork
Für die Konfiguration findet man im Verzeichnis /etc/apache2/mods-enabled die Datei dav_svn.conf. Die Minimaleinrichtung sieht so aus:
<Location /svn>
  DAV svn
  # SVNPath /var/lib/svn
  SVNParentPath /var/lib/svn
</Location>
Mehrbenutzer ist auch möglich:
<Location /svn>
  DAV svn
  # SVNPath /var/lib/svn
  SVNParentPath /var/lib/svn
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
</Location>
Für die Mehrbenutzervariante müssen die Passwörter gesetzt werden.
# htpasswd -c /etc/apache2/dav_svn.passwd johannes
New password: 
Re-type new password: 
Adding password for user johannes
# 
Vor eine Benutzung muss das Verzeichnis eingerichtet werden, das Repository angelegt, die Zugriffsrechte für den Apache-Server eingerichtet und der Apache neu gestartet werden.
# mkdir /var/lib/svn
# svnadmin create /var/lib/svn/src
# chown -R www-data /var/lib/svn/
# /etc/init.d/apache2 restart
Datensicherung des Subversion
# svnadmin dump /var/lib/svn/src > svnsrc.dump
Zurückholen:
# svnadmin create /var/lib/svn/src
# svnadmin load /var/lib/svn/src < svnsrc.dump