Ich habe mir die Githooks-Manpage angesehen, aber wenn mir nichts fehlt, sehe ich keine Option für lokale Git-Hooks nach dem Push. Ich hätte gerne eine, die die API-Dokumente auf meinem Webserver aktualisiert (für die ich bereits ein Skript habe), nachdem ich den Hauptzweig auf das GitHub-Repo verschoben habe. Natürlich könnte ich einfach mein eigenes Skript schreiben, das den Git-Push und die API-Dokumente kombiniert, aber das fühlt sich etwas unelegant an.
71
post-update
Hooks können für diesen Fall ausgelöst werden, oder?Antworten:
Ab Git 1.8.2 wird vor dem Push-Vorgang ein neuer Hook aufgerufen: Pre-Push Wenn das Skript einen anderen Wert als 0 zurückgibt, wird der Push-Vorgang abgebrochen.
Erwähnen Sie in den Versionshinweisen: https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L167
Beispiel: https://github.com/git/git/blob/87c86dd14abe8db7d00b0df5661ef8cf147a72a3/templates/hooks--pre-push.sample
quelle
git-push
und bevor Git das Commit / s tatsächlich pusht. In Git ist kein anderer Push-bezogener Hook integriert.Eine andere Lösung für dieses Problem besteht darin, einen Wrapper für
git push
die Ausführung.git/hooks/pre-push
und.git/hooks/post-push
Skripte vor und nach demgit push
Aufruf zu haben. Ein möglicher Wrapper könnte folgendermaßen aussehen:Als
git-push-wh
irgendwo in Ihrem gespeichertPATH
, kann es dann aufgerufen werden, alsgit push-wh
ob Sie mit Haken schieben möchten.quelle
Ich bin kürzlich auf dasselbe Problem gestoßen. Ich wollte einen Hook, damit ein Push von meinem Git-Submodul die neue Submodulreferenz im 'Superprojekt' festschreibt.
Wie Chris bereits erwähnt hat, ist der beste Weg, einfach einen Git-Alias wie folgt zu verwenden:
Dadurch wird Ihrer .git / config-Datei Folgendes hinzugefügt:
Und jetzt, wenn Sie Folgendes eingeben:
Ihre Änderungen werden gepusht und dann wird update-server.sh ausgeführt.
quelle
Diese Art von Hook wird von Git nicht unterstützt. Es liegt außerhalb der gültigen Gründe für einen Git-Hook, wie sie vom Git-Betreuer angegeben wurden.
Die einleitende Bemerkung in der oben verlinkten Nachricht spricht fast direkt Ihren Fall an:
PS Ein "Single Push" -Tipp
Ein Extra
pushurl
zu einem lokalen Repo mit einem "alternativen" Objektspeicher kann Ihnen einen geringen Overhead bieten, um einen Push-Hook lokal auszuführen. Aber wirklich, der Aufwand ist viel mehr alsgit push upstream && update-web-server
(vielleicht in einem Shell-Alias, Git-Alias oder Skript).quelle
Ich benutze eine Funktion dafür:
Der compdef-Teil ist für ZSH.
quelle