Wenn Sie Ihr SVN u.a. auch für die automatische Versionsverteilung nutzen (Stichwort "post-commit") und dieser Dienst plötzlich nicht mehr läuft, nutzen Sie folgende Möglichkeiten für die Analyse bzw. Lösung:
Logging des post-commit hooks
- Öffnen Sie die entsprechende Scriptdatei
Beispiel:vi /srv/svn/example/hooks/post-commit
- Ergänzen Sie die Datei entsprechend diesem Beispiel:
#!/bin/sh echo `date` " Start SVN post-commit" >> /var/log/svn.log whoami >> /var/log/svn.log svn update /srv/htdocs/example --username x --password y >> /var/log/svn.log 2>&1 echo `date` " End SVN post-commit" >> /var/log/svn.log
In diesem Beispiel wird u.a. der Zeitstempel und der Benutzername des ausführenden Benutzers gespeichert
- Legen Sie die angegebene Logdatei an:
touch /var/log/svn.log
- Setzen Sie die passende Berechtigung:
chmod 777 /var/log/svn.log
Natürlich sollte später die exakte Berechtigung für den richtigen Benutzer gesetzt werden. Für die Analyse ist die komplette Freigabe jedoch besser
- Committen Sie eine Änderung in Ihrem System und prüfen Sie anschließend die Logdatei
Beispiel:Thu Jan 14 21:44:43 CET 2010 Start SVN post commit wwwrun U /srv/htdocs/example/test/index.php Updated to revision 1064. Thu Jan 14 21:44:44 CET 2010 Ende SVN post commit
Häufiger Fehler bei post-commit Problemen
Sehr häufig finden Sie z.Bsp. die folgende Fehlermeldung in Ihrem Log:
Thu Jan 14 21:43:42 CET 2010 Start SVN post commit wwwrun svn: Can't convert string from native encoding to 'UTF-8': svn: empf?\195?\164nger.bmp Thu Jan 14 21:43:43 CET 2010 Ende SVN post commit
In diesem Beispiel wurde versucht, eine Datei "empfänger.bmp" im Trunk zu speichern. Aufgrund der Sprachdefinition in "locale":
LC_CTYPE=de_DE.UTF-8
konnte SVN mit dem Umlaut "ä" nicht viel anfangen und versuchte das Zeichen zu konvertieren. Den dadurch entstandenen Dateinamen konnte das System nicht erkennen.
Lösungsvorschlag 1
- Benennen Sie (im o.a. Beispiel) die Datei um in "empfaenger.bmp"
- Lösen Sie den post-commit Hook manuell aus:
sudo -u wwwrun /srv/svn/example/hooks/post-commit
- Das SVN sollte wieder normal funktionieren
Lösungsvorschlag 2
- Führen Sie folgenden Befehl aus:
export LC_CTYPE=en_US.UTF-8
- Überprüfen Sie Ihre "locale" Umgebung:
locale
- Nun sollten Sie u.a. den folgenden Eintrag sehen:
LC_CTYPE="en_US.UTF-8"