Subversion mit WebDAV einzurichten und zu nutzen, ist total einfach. Zumal meist auf den Servern schon ein Apache läuft, der dann nur noch ein Zusatzmodul benötigt. WebDAV sollte man wegen Klartextpasswörtern nur
in Verbindung mit SSL betreiben.
Nun bin ich auf ein misteröses Problem gestoßen: Wenn man versucht mit
svn move datei1 datei2 eine Datei umzubennen bzw. zu verschieben (oder per
svn copy zu kopieren), meckert Subversion spätestens beim Einchecken mit
svn: Übertragen fehlgeschlagen (Details folgen):
svn: COPY of datei2: 502 Bad Gateway (https://svn.domain.de)
Danach hab ich auch eine Weile gegooglet, aber nach einer erfolglosen Weile aufgegeben.
Schließlich konnte ich mir immer mit einem
mv datei1 datei2
svn revert datei1
svn delete datei1
svn add datei2
aushelfen. Aber schön ist das, gerade bei vielen Dateien, sicherlich nicht.
Die Ursache dieses Problem liegt am Apache im Zusammenspiel mit Vhosts und SSL.
SVN über WebDAV nutzt HTTP als Transportprotokoll. In unserem Fall mit HTTPS geschützt. Ein Request zum Kopieren sieht ungefähr so aus:
COPY /svn/repos/datei1 HTTP/1.1
Host: svn.example.org
Destination: https://svn.example.org/svn/repos/datei2
Die Tücke liegt im Detail. Theoretisch sollte der Aufruf in etwa folgendes bedeuten:
COPY https://svn.example.org/svn/repos/datei1 https://svn.example.org/svn/repos/datei2
Einfach auf dem selben Server, im selben Verzeichnis eine Datei kopieren.
Dies missinterpretiert der Apache jedoch und macht daraus:
COPY http://svn.example.org/svn/repos/datei1 https://svn.example.org/svn/repos/datei2
Der Apache bemerkt, dass er nicht zwischen 2 verschiedenen Hosts kopieren kann und beendet die Anfrage mit
502 Bad Gateway.
Das liegt an einer fehlerhaften Vhostkonfiguration. So fehlt dem Vhost
svn.example.org in seiner Definition die Direktive
SSLEngine On, die dem Apache vermittelt, es mit einem mit SSL-Verbindung geschütztem Vhost zu tun zu haben. Fehlt diese, wird aus
svn.example.org halt
http://svn.example.org
Wie man die
SSLEngine-Direktive aktiviert bekommt, beschreibe ich in einem
anderen Artikel.
Quellen:
http://www.science.uva.nl/research/air/wiki/Subversion502BadGateway