Mittels SSH auf ein Subversion Repository zugreifen

Es gibt mehrere Möglichkeiten auf ein SVN Repository zuzugreifen, u.a. mit "file://" direkt im lokalen filesystem, remote mit "svn://" über den "svnserve daemon" oder via ssh mit "svn+ssh://".
Wir konzentrieren uns in diesem Tutorial auf den Zugriff via ssh wobei wir für jeden Benutzer ein UNIX Benutzerkonto und Gruppen einrichten werden. Das ganze können wir dann mit dem Eclipse Plugin "Subclipse" verwenden.

Pakete installieren

Unter Debian installieren wir mit "apt-get update; apt-get install subversion subversion-tools" die nötigen Pakete. Derzeit ist das die Version 1.4.2, sollte aber keine große Rolle spielen.

Benutzer und Gruppen anlegen

Als root erzeugen wir zunächst die Gruppe svn für alle repositories:
addgroup svn

Wir brauchen pro Repository noch eine weitere Gruppe, um die Rechte voneinander zu trennen:
addgroup tutorial

Als nächstes legen wir zwei Beispiel Benutzer in unserem System an, die sich via SSH connecten können:
adduser geek
adduser nerd


Da die beiden Benutzer generell auf svn Zugriff erhalten sollen, stecken wir sie in die Gruppe svn:
addgroup geek svn
addgroup nerd svn


Weiterhin sollen sie auf das Demo Repository Zugriff erhalten:
addgroup geek tutorial
addgroup nerd tutorial

Verzeichnis anlegen

Wir legen ein Verzeichnis direkt im Hauptverzeichnis an, auf das die Gruppe "svn" Schreibzugriff bekommt:
mkdir /svn/
chgrp svn /svn/
chmod 770 /svn/


Schließlich legen wir das Repository an, geben der Gruppe Schreibrechte und sorgen dafür, dass die Dateien der Datenbank immer derselben Gruppe gehören, indem wir das set-group-id bit und Schreibrechte für die Gruppe setzen:
svnadmin create /svn/tutorial
chgrp -R tutorial /svn/tutorial
chmod -R g+ws /svn/tutorial/db

Wrapper Skript

Damit immer die ganze Gruppe Schreibzugriff erhält - unabhängig davon wer die Dateien eincheckt - benennen wir das svn Programm um, und erzeugen anstatt dessen ein kleines Wrapper Skript, dass vor dem Kommando immer die umask setzt.
Damit die Dateien die Maske "770" erhalten müssen wir das 7er Komplement "007" als umask setzen:
mv /usr/bin/svn /usr/bin/svn-orig

Das Skript sieht folgendermaßen aus:
#!/bin/sh

umask 007
/usr/bin/svn-orig "$@"

Standard Verzeichnisse

Es hat sich bei SVN eingebürgert, dass man drei Basisverzeichnisse anlegt:

  • trunk
  • branches
  • tags

svn mkdir svn+ssh://www.example.com/svn/tutorial/trunk -m "trunk Verzeichnis erzeugt"
svn mkdir svn+ssh://www.example.com/svn/tutorial/branches -m "branches Verzeichnis erzeugt"
svn mkdir svn+ssh://www.example.com/svn/tutorial/tags -m "tags Verzeichnis erzeugt"


Wenn man schon etwas Code geschrieben hat, kann man das Verzeichnis importieren:
svn import /pfad/zum/foobar/source/ svn+ssh://www.example.com/svn/tutorial/trunk/foobar -m "initial import"

Eclipse Plugin Subclipse

Unter File -> New -> Project -> SVN/Checkout Projects from SVN können wir jetzt "Create a new repository location" anwählen. Als URL gegen wir dann svn+ssh://www.example.com/svn/tutorial/trunk/foobar an.

Probleme mit Eclipse unter Windows

Falls Ihr beim Versuch in Eclipse eine neue Location anzugeben die Fehlermeldung: "svn: Can't create tunnel: Das System kann die angegebene Datei nicht finden." erhaltet, solltet Ihr unter "Window" -> "Preferences" -> "Team" -> "SVN" als Interface "SVNKit (Pure Java)" anstatt "JavaHL (JNI)" einstellen. Bei mir war das Problem dadurch gelöst. Dadurch wird ebenfalls der Fehler "Failed to load JavaHL Library." behoben.

Wenn Euch diese Seite weitergeholfen hat, dann verlinkt sie bitte. Ihr habt ein Problem? Fragen, Anregungen und Kritik bitte an feedback@lilalinux.net
Ihr könnt mich auch per ICQ erreichen: 1028730, sowie mit Jabber/GoogleTalk/XMPP: lilalinux@jabber.net-lab.net