Jul 032008
 

Subversion wird seit acht Jahren entwickelt und hat im Februar 2004 die erste stabile Version 1.0 erreicht. In dieser Zeit wurden viele Entwickler von den Vorzügen von Subversion überzeugt. Wer CVS kennt, wird sich als Entwickler nicht wensentlich umgewöhnen müssen, da das Konzept Copy-Modify-Merge gleich geblieben ist. Administrativ hat sich allerdings Einiges geändert. Die Versionsdaten werden wie in einer Datenbank gespeichert. Die Backend-Schnittstelle ermöglicht es, verschiedene Backends zu verwenden. Der Vorteil gegenüber CVS ist hier, dass die Dateien nicht direkt manipuliert werden können, da sie nur als Binärdaten vorliegen. Bei CVS werden in einer ASCII-Datei Diffs gespeichert, sodass Manipulationen möglich sind.

In der Praxis hat sich Subversion durch die Stabilität bewährt. Der Verwaltungsaufwand ist nur minimal. Nach dem Einrichten mit svnadmin kann man sofort arbeiten. Es gibt aber noch ein paar Tipps, wie man durch Feintuning die Disziplin der Entwickler fördern kann. Zwei herausragende Punkte sind einerseits die Commit-Meldungen und andererseits die anonymen Commits. Unter Subversion sind leere Commit-Meldungen möglich. Möchte man die Entwicklungsgeschichte nachverfolgen, sind leere Kommentare teilweise frustrierend. Wenn Dutzende von Revisions committed wurden, ohne dass sich scheinbar was geändert hat, muss man ein Difftool bemühen, um Änderungen nachverfolgen zu können. Ähnlich verhält es sich bei anonymen Usern. Subversion lässt bei falscher Konfiguration anonyme Commits zu.

Um leere Commit-Meldungen zu unterbinden gibt es das Mittel der Hook-Skripte. Diese werden zu bestimmten Zeitpunkten während eines Commits aufgerufen. Dadurch können Plausibilitätschecks durchgeführt werden und ggf. ein Commit verhindert werden. Baut man in den sog. pre-commit-hook eine Prüfung ein, die eine leere Meldung verhindert, bleiben die Log-Meldungen deutlich informativer

Das folgende Beispiel zeigt das pre-commit-Skript. Es überprüft, ob mindestens 15 Zeichen und alphanumerischer Text eingegeben wurde.

#!/bin/bash

REPOS="$1"
TXN="$2"

LOG=`svnlook log -t "$TXN" "$REPOS"`
COUNT=`echo $LOG |wc -c`

# Check for at least some chars.
if [ $COUNT -lt 15 ]
then
echo 1>&2
echo 1>&2  "Need at least 15 characters for commit message!"
exit 1
fi

# Check for some clear text characters
echo "$LOG" | grep "[a-zA-Z0-9]" > /dev/null && exit 0
echo 1>&2
echo 1>&2  "Need a clear text message!"
exit 1

Die Konfiguration, um anonyme Commits zu verhindern, muss im Apache erfolgen. In unserer Firma authentifiziert und authorisiert Apache gegen OpenLDAP. Hier kann eine Authentifizierung erzwungen werden und anonymer aber lesender Zugriff erlaubt werden. Bei Schreibzugriffen wird eine Authorisierung gegen eine LDAP-Gruppe durchgeführt.

Die Konfiguration für ein vollständiges Subversion-Repository sieht wie folgt aus:

<IfModule mod_dav_svn.c>

<Location /subversion/webdev>>
        DAV svn
        SVNPath /data/subversion/webdev
        Options +Indexes
        Allow from all

        AuthType Basic
        AuthName "Subversion Repository: webdev"

        AuthzLDAPAuthoritative off
        AuthBasicProvider ldap
        AuthLDAPURL "ldap://master.domain.de slave.domain.de/ou=Users,dc=domain,dc=de?uid?sub?(objectClass=*)"
#       <LimitExcept GET PROPFIND OPTIONS REPORT>
                Require ldap-group cn=webdev,ou=Groups,dc=domain,dc=de
#       </LimitExcept>
        AuthLDAPGroupAttribute memberUid
        AuthLDAPGroupAttributeIsDN off
        SSLRequireSSL
<Location>
</IfModule>

Diese Konfiguration verlangt eine Authorisierung gegen die LDAP-Gruppe webdev. Soll lesender anonymer Zugriff gestattet werden, müssen die # entfernt werden. Zusätzlich wird durch die Direktive SSLRequireSSL SSL-Verschlüsselung verlangt.

Quellen:
www.apache.org
subversion.tigris.org

Sorry, the comment form is closed at this time.