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.
Sorry, the comment form is closed at this time.