
Hintergrund
Ich versuche, eine Reihe von Commit-Hooks für Subversion zu implementieren. Ich habe viel recherchiert, um einen einfachen Test-Hook zum Laufen zu bringen, hatte jedoch kein Glück.
Als Referenz habe ich die folgenden Links durchgesehen, befolgt und dann versucht, Methoden zu kombinieren:
1.Subversion-Handbuch zur Verzeichniskonfiguration
2.Tortoisevn-Handbuch für serverseitige Hook-Skripte
3.Eine Erklärung zu Server Side Hooks, die einen Link zum Subversion-Handbuch enthält
4.Das Wordaligned-Tutorial für Pre-Commit-Hooks
5.Eine Serverfehler-Antwort für Probleme mit Commit-Hooks
Es gibt auch eine Reihe anderer Sites, auf die ich verwiesen und die ich verwendet habe, aber ich bekomme die Commit-Hooks immer noch nicht zum Laufen.
Meine Umgebung
Auf meinem Rechner läuft RHEL6 (Cent OS).
Die Subversion befindet sich auf einem Remote-Rechner, auf den ich ohne Erlaubnis meines Vorgesetzten nicht direkt zugreifen kann.
Auf dem Remote-Rechner läuft Subversion 1.6.
Dies ist die aktuelle Struktur meines Repositorys:
test-for-svn-hooks
|-branches
|-hooks
| +-pre-commit
|-tags
+-trunk
Die Berechtigungen für die Datei vor dem Commit sind vorübergehend auf gesetzt 777
. Die Berechtigungen aller Verzeichnisse sind auf gesetzt 775
.
Dies ist das Beispielskript, das ich zum Testen des Commit-Hooks erstellt habe:
#!/usr/bin/env bash
echo "THOU SHALL NOT PASS" 1>&2
exit 1
Ich habe so ziemlich alles geprüft und getestet, was ich konnte, um sicherzustellen, dass mein Pre-Commit-Hook richtig funktioniert. Ich weiß nicht, was ich sonst noch prüfen muss, um sicherzustellen, dass er funktioniert. Ich kann alles committen, was ich will, und bekomme keine Meldungen auf meinem Bildschirm angezeigt.
Fragen
1. Habe ich bei der Implementierung von Hooks etwas vergessen oder übersehen?
2. Wenn ich einen Hook auf diese Weise implementiere, muss ich mir dann Gedanken darüber machen, denselben Hook in Tortoisesvn noch einmal zu implementieren?
Wir sind für jegliches Feedback und/oder jeden Vorschlag sehr dankbar.
Antwort1
- Habe ich bei der Implementierung von Hooks etwas vergessen oder übersehen?
Verwenden Sie nicht die Berechtigung 777. Manchmal kann das sogar kontraproduktiv sein. Manche Tools funktionieren mit solchen verdächtigen Berechtigungen möglicherweise nicht. In Ihrem Fall ist das wahrscheinlich nicht das Problem, denn bei mir funktioniert es mit dieser Einstellung. Aber tun Sie es einfach nicht. Ändern Sie es in 755.
Eine weitere Plausibilitätsprüfung besteht darin, das Hook-Skript direkt auf dem Server auszuführen:
/path/to/test-for-svn-hooks/hooks/pre-commit
Wenn Ihr Skript aussagekräftigere Inhalte hat, sollten Sie auch mit den entsprechenden Parametern testen, zum Beispiel:
/path/to/test-for-svn-hooks/hooks/pre-commit /path/to/test-for-svn-hooks TXN
Testen Sie es anschließend mit einem Checkout auf dem Server selbst, zum Beispiel:
svn co /path/to/test-for-svn-hooks /tmp/test1
cd /tmp/test1
date > date.txt
svn add date.txt
svn ci -m 'added some junk'
Basierend auf dem, was Sie in Ihrem Beitrag geschrieben haben, sollten diese Schritte funktionieren. Ich kenne die Bedingungen, unter denen Ihre Tests fehlschlagen, nicht im Detail. Wenn Sie bis zu diesem Punkt gelangen, werden Sie vielleicht den Grund für Ihre fehlgeschlagenen Tests erkennen.
- Wenn ich einen Hook auf diese Weise implementiere, muss ich mir dann Gedanken darüber machen, denselben Hook in Tortoisesvn noch einmal zu implementieren?
Nein. Hooks werden serverseitig definiert. Auf der Clientseite muss nichts getan werden. Alle Clients unterliegen den Regeln, die Sie im Pre-Commit-Hook definieren.