Subversion

Aus DebianforumWiki

Wechseln zu: Navigation, Suche

Neben CVS, Git und Bazaar stellt Subversion wohl das bekannteste Versionskontrollsystem dar. Der nachfolgende Artikel soll nicht nur die Installation und Konfiguration von Subversion beschreiben sondern auch einen Einblick in die von Subversion zur Verfügung gestellten Strukturen zur Versionierung von Dateien und Verzeichnissen verschaffen.

Inhaltsverzeichnis

Struktur

Durch Subversion wird zunächst Speicherplatz für Dateien und Verzeichnisse, der unter Versionskontrolle steht, zur Verfügung gestellt. Dieser kann in Abhängigkeit zu den Anforderungen frei konfiguriert werden, für eine bessere Strukturierung steht allerdings das Tag- und Branchkonzept zur Verfügung, welches die Entwicklung in drei Blöcke unterteilt:

trunk
Der Ordner trunk enthält den Hauptentwicklungslinie
tag
Der Ordner Tag enthält so genannte Baselines. Dies sind Versionen der Software, die bei einem bestimmten Stand eingefroren und mit einem Namen versehen wurden.
branch
Der Ordner branch enthält die Forks der Hauptentwicklungslinie. Dies sind Entwicklungen, die zwar den gleichen Ursprung wie die Hauptentwicklungslinie haben, sich nun aber in eine neue Richtung entwickeln.

Anhand dieser Unterteilung können verschiedene Konfigurationen erstellt werden, einige dieser Konfigurationen sollen beispielhaft in der nächsten Grafik dargestellt werden:

  • //gfx-here//

Es ist zu bemerken, dass die Unterteilung in trunk, tag und branch dabei nicht zwingend ist.

Grundinstallation / installierte Pakete

Als Basis für die unten beschriebene Installation dient ein Debian 6.0 "squeeze", wobei folgende Pakete zusätzlich installiert wurden:

  • vim
  • subversion
  • apache2
  • libapache2-svn

Konfiguration von Subversion

In diesem Block soll beschrieben werden, wie Subversion nach einer erfolgreichen installation konfiguriert wird, hierbei soll beschrieben werden, wie ein Repository angelegt wird und wie Benutzer und deren Rechte bei Subversion verwaltet werden.

Anlegen eines Repositories

Bevor ein Repository angelegt wird, soll mittels

root@debian:~# mkdir -p /var/svn

ein Verzeichnis erstellt werden, in welchem alle Repositories gespeichert werden sollen. Im Anschluß wird mit dem Befehl

root@debian:~# svnadmin create /var/svn/repository

ein Repositiory erzeugt. Da in der hier beschriebenen Konfiguration der Datentransfer später durch den Apache erfolgen soll, müssen die Verzeichnisse noch dem Apache-Benutzer zugeordnet werden, dieses geschieht mit:

root@debian:~# chown -R www-data:www-data /var/svn

Zugriffsverwaltung

Der angelegte Subversion-Repository kann nun bereits benutzt werden. Allerdings ist es oft wünschenswert den Zugriff auf einzelne Repositories zu beschränken. Die Konfiguration für den Zugriff erfolgt mittels einer Kombination aus Access Controll List und Benutzerverwaltung. Aus diesem Grund müssen für beide Komponenten zunächst die zwei Dateien

root@debian:~# touch /var/svn/acl /var/svn/user

angelegt werden.

Benutzerverwaltung

Die Benutzerverwaltung geschieht einfach mittels htaccess Datei, welche die Syntax

$user:$hash

für den Benutzer $user mit dem Passwort-Hash $hash besitzt. Dabei wird ein Benutzer einfach mittels

root@debian:~# htpasswd /var/svn/user $user

erstellt.

Access Control List

Die Einschränkung der Zugriffsrechte auf ein Repository oder auf einen Teil eines Repositories erfolgt mittels Access Control List, welche die Syntax

[$repo:$path]
$user = $perm
@$group = $perm

besitzt. Den einzelnen Elemente können dabei folgende Werte zugewiesen werden.

$repo
Name des Repositories, welches mittels svnadmin create angelegt wurde.
$path
relativer Pfad zu dem Teil des Repositories, für den diese Regel gelten soll. Falls die Regel für das gesamte Repository definiert werde, ist der Pfad ein einfacher Slash ("/").
$user oder @$group
Er definiert die Benutzer, für die diese Regel gelten soll. Falls eine globale Regel eingerichtet werden soll, kann dies mit mittels "*" geschehen. Ansonsten kann entweder ein Benutzername aus der htaccess-Datei oder ein Gruppenname (siehe unten) angegeben werden.
$perm
In der ACL wird zwischen verschiedenen Rechten unterschieden, dies ist zum einen das Lese-Rechte (r), hierbei dürfen Benutzer ausschließlich Objekte auschecken (auf ihr eigenes System kopieren). Während dürfen bei Lese-/Schreib-Rechten (rw) Objekte sowohl aus- als auch eingecheckt werden.
Beispiel

Die in der nachfolgenden Beispieldatei erwähnten Benutzer (fmueller, pschmidt, hmustermann) müssen in der .htaccess definiert sein.

[groups]
@Developer = fmueller, pschmidt
 
# Benutzer der Gruppe Developer duerfen Dateien und Verzeichnisse aus dem
# Repository foobar aus- und einchecken, während der Benutzer hmustermann
# nur Dateien auschecken darf.
[foobar:/]
@Developer = rw
hmustermann = r
 
# Benutzer fmueller darf Dateien und Verzeichnisse aus dem Entwicklungszweig
# trunk im Repository test aus- und einchecken, waehrend alle anderen
# ausschliesslich Dateien- und Verzeichnisse auschecken duerfen.
[test:/trunk]
fmueller = rw
* = r

Konfiguration vom Apache

Definition eines vHosts

Es ist zumeist am sinnvollsten für Subversion eine eigene Subdomain anzulegen. Dieses erfolgt am einfachsten, indem man im Verzeichnis /etc/apache/sites-available/ eine neue Konfigurationsdatei folgendem Inhalt angelegt:

<VirtualHost *:80>
   ServerName svn.example.com
   <Location />
      DAV svn
      SVNParentPath /var/svn/
      AuthType Basic
      AuthName "Test"
      AuthUserFile /var/svn/users
      AuthzSVNAccessFile /var/svn/acl
      Require valid-user
   </Location>
   LogLevel info
</VirtualHost>

Erwähenswert ist die Tatsache, dass SVNParentPath auf genau das Verzeichnis verweissen muss, in dem die Repositories gespeichert werden. Falls in der Subdomain ein explizites Subversion-Repository verwendet werden soll, muss der Eintrag:

SVNPath /var/svn/repository

lauten. Alle weiteren Parameter in der Datei sollten selbsterklärend sein und können ggf. in der [Referenz zum Authentifizierungsmodul] auf der Homepage vom Apache-Projekt nachgelesen werden.

Aktivieriung des vHosts

Nach diesen Anpassung genügt es, die vHost-Datei in das Verzeichnis /etc/apache2/sites-enabled mittels

root@debian:~# cd /etc/apache2/sites-enabled
root@debian:~# ln -s ../sites-available/svn.example.com svn.example.com

oder

root@debian:~# a2ensite svn.example.com

zu verlinken und den Webserver mittels

root@debian:~# /etc/init.d/apache2 restart

neu zu starten.

Meine Werkzeuge