Auto-Checkout mit Subversion

Wenn man seine Homepage mit Subversion pflegt, oder an einem Software-Projekt entwickelt das ständig den aktuellen Entwicklungsstand in eine Testumgebung kopieren soll, dann ist der automatische Checkout per Subversion eine gute Lösung.

## Subversion Hooks
Subversion verfügt über sogenannte „Hooks“, die zu bestimmten Zeitpunkten bei einem Commit oder Checkout eines Repositorys automatisch aufgerufen werden. Diese liegen im Verzeichnis des Repos im Unterordner „hooks“ als Templates zur weiteren Bearbeitung.

In der SVN-FAQ gibt es dazu [auch einen Eintrag](http://subversion.tigris.org/faq.html#website-auto-update), allerdings wird dort nicht näher auf das „Wie“ eingegangen. Zum Debuggen eines Hooks ist [dieser Eintrag](http://subversion.tigris.org/faq.html#hook-debugging) hilfreich. Zu Hooks allgemein gibt es ein [eigenes Kapitel im Subversion Buch](http://svnbook.red-bean.com/en/1.1/ch05s02.html#svn-ch-5-sect-2.1).

## Der post-commit Hook
Für den automatischen Checkout nach einem Commit bietet sich der „post-commit“ Hook an. Dort ist schon ein Beispiel-Eintrag für die automatische E-Mail Benachrichtigung an eine bestimmte Adresse nach einem Commit eingerichtet.

Zunächst kopieren wir das Template um es an unsere Bedürfnisse anzupassen:

$ cp post-commit.tmpl post-commit
$ vim post-commit

Ganz unten in der Datei ist der besagte Beispiel-Aufruf eines Perl-Skripts, und darunter fügen wir den Aufruf unseres Skriptes ein:

${REPOS}/hooks/bin/svn-auto-checkout „$REPOS“ „$REV“ trunk/pfad/im/repo /home/user/public_html/pfad/zur/arbeitskopie

## Anlegen des svn-auto-checkout Skripts
Ich habe diesen Skript [hier gefunden](http://larve.net/people/hugo/2007/05/svn-auto-look-and-checkout) und nicht weiter angepasst. Der Einfachheit halber gibt es ihn [hier bei Exanto als Textdatei](/dl/svn-auto-checkout.txt „SVN Auto Checkout“).

Der Skript landet in $REPO/hooks/bin (Verzeichnis muss vorher erstellt werden) und heißt „svn-auto-checkout“. Dabei auf die richtigen Rechte achten! Das bin-Verzeichnis und der Skript müssen dem User gehören unter dem auch das Repository läuft, in meinem Fall www-data.

Anschließend wird der Skript und der Hook noch ausführbar gemacht:

$ cd /pfad/zum/repository/hooks
$ chmod +x bin/svn-auto-checkout
$ chmod +x post-commit

## Arbeitskopie anlegen
Falls noch nicht geschehen, muss irgendwo auf dem lokalen System noch die Arbeitskopie die vom auto-checkout aktualisiert werden soll angelegt werden. Auch dieses Verzeichnis und alle Dateien müssen dem User gehören unter dem das Repository läuft, sonst funktioniert es nicht.

Bei Problemen am Besten den Hook lokal testen, ein Link wie das geht steht oben. [Dieser Post](http://www.sematopia.com/?p=218) hat mir ebenfalls geholfen das Ganze zum Laufen zu kriegen. Probleme gab es nur beim Checkout über einen https-Server mit selbst erstelltem Zertifikat… dafür habe ich leider keine Lösung gefunden, und am Ende einfach die Arbeitskopie umverlagert auf http und den Checkout dann darüber gemacht.

Viel Erfolg!

13 Kommentare

  1. Hey, das klingt wirklich gut!

    Genau nach soetwas hatte ich vor einiger Zeit mal gesucht, nur leider nichts passendes finden können.

    Das werde ich gleich mal ausprobieren. Zum Glück habe ich heute Abend nichts mehr vor. 😉

    Max

  2. Interessanter Beitrag. Ich arbeite zwar bereits seit längerem mit Subversion
    aber die “Hooks” warten mir bis jetzt nicht bekannt.

    Das Beispiel mit der Email werde ich auf jeden Fall mal testen.

  3. Hallo!
    Leider bekomme ich nach einbinden des post-commit hooks immer folgenden Fehler:
    Error: Commit failed (datails follow):
    Error: MERGE request failed on ‚/myrepo/trunk‘
    Error: MERGE of ‚/myrepo/tunk‘: 200 OK (http://myipadress)

    Habe beim googlen des problems zwar viele fragen gefunden, jedoch keine antworten. Weiß von euch zufällig jemand bescheid um was für einen fehler es sich hier handeln kann?

  4. Hallo Bernd,

    es sieht so aus, als hättest du in der Arbeitskopie auf dem Server eigene Änderungen durchgeführt, und Subversion versucht jetzt die Version aus dem Repository mit der Arbeitskopie und deinen Änderungen zu verschmelzen (MERGE). Das klappt allerdings nicht, da manchmal ein manueller Eingriff nötig ist um die Arbeitskopien zusammen zu führen. Wahrscheinlich ist es das einfachste, die Arbeitskopie auf dem Server einmal komplett zu löschen und dann neu auszuchecken.

    Gruß,
    Ingo

  5. „Probleme gab es nur beim Checkout über einen https-Server mit selbst erstelltem Zertifikat… dafür habe ich leider keine Lösung gefunden…“

    Es gibt eine einfache Lösung dafür:
    1) am Server (als root) einloggen, danach als www-data user authentifizieren :
    su -l www-data

    2) working_copy am server als www-data auschecken
    cd /path/to/working/copy
    svn checkout

    3) Bei der Frage „(R)eject, accept (t)emporarily or accept (p)ermanently?“ mit ‚p‘ antworten

    -> sudo und fertig…

    Da der Post-Commit Hook als www-data user ausgeführt wird, muss das Zertifikat für den www-data user permanent akzeptiert werden. Es genügt nicht es als root zu akzeptieren.

    1. Also bei mir klappt das so nicht. Obwohl ich als www-data das update mache wird der „p“ (permanent) nicht gespeichert. Er frägt jedes mal wieder nach dem Zertifikat 🙁 Hat noch wer eine Idee?

      1. Hi Thomas,

        probier‘ mal im Homeverzeichnis des www-data Users ein „.subversion“ Verzeichnis anzulegen und es dem Nutzer zuzuweisen. Subversion speichert dort die Serverzertifikate und Logindaten zwischen. Oft hat der www-data User keine Schreibrechte auf sein Homeverzeichnis, und SVN kann das daher nicht anlegen.

        Gruß,
        Ingo

  6. jessica host porn babysiter porn vids make a porno soundtrack your free home porn moms squirting pussy the porn tribune mercedes nude sex scenes statistic sex frequency georgia registered sex offender vintage asian porn pics free captured teen sex bebes kick ass free local sex in beaver oklahoma gay gang bang cum milf sezx daniel radcliffes sex scene carnival sex magazine sex girls full movie sex school tight panties ass

  7. unknown film of sex lesbian orgies in texas latine porn videos vanessa williams sex video ride the wooden horse bdsm yoshi xxx free masturbation moves quicktime sex machine videos xxx chichi milf’s anal story of sex change black lesbians in shower ameteur sex movie xxx dvd streaming free hentai anime kiss dolls quiero ver porn pigtail porn clip pornstar sonia carrere um shots at world sex babes hot sex

  8. Also ich arbeite mit TortoiseSVN um das projekt local bei mir zu arbeiten. wenn ich bei TortoiseSVN commit mache, also um es wieder ins aktuelle repos zu schieben bekomme ich fehler. die post-commit manuell ausgeführt sagt mir das „.“ keine arbeitskopie ist 🙁

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert