kowsky's answer ist der richtige, vorausgesetzt, Ihr Git ist mindestens 1.8.2 (und wenn nicht, sollten Sie upgraden :-)). Die verknüpften Beispiele sind jedoch fehlerhaft.
Die pre-push hook ist mit zwei Argumenten aufgerufen, die vorsehen:
- der Name des entfernten, wenn ein Remote-Namen verwendet wird, sonst die URL
- die URL (das Ergebnis der Fern der genannten Expandieren wenn eine benannte Fern verwendet wird)
Was ist geschoben werden, was etwas, das Sie an der Zeit, die Sie git push
laufen angeben ist, an dem Haken versehen ist auf seinem Standardeingang. Dies ist, wo die zwei verknüpften Beispiele beide gebrochen sind.
Wenn Sie laufen:
git push github refspec1 refspec2 ... refspecN
dann die Referenz (en) gedrückt werden diejenigen in dieser Befehlszeile angegeben sind.
Wenn Sie laufen:
git push github
(ohne refspecs), die Menge des Zweiges ist gedrückt werden ... na ja, es ist kompliziert, aber in modernen Git, wird standardmäßig auf den aktuellen Zweig .
Die Probe vorgeSchubHaken nehmen dass nur der Stromzweig zu gedrückt wird. Da, dass die moderne Standard ist, werden die Proben wahrscheinlich funktionieren, bis Sie versehentlich laufen:
git push github deploy
(während auf, sagen wir, master
), und dann werden sie nicht, und können Sie traurig sein. :-)
Um sie zu beheben, verwenden Sie ein githook, das z.:
#! /bin/sh
[ "$1" = github ] || exit 0 # allow if not pushing to github
while read lref lhash rref rhash; do
case "$lref" in
refs/heads/deploy)
echo "error: attempt to push 'deploy' branch to github" 1>&2
exit 1;;
esac
done
Dies ermöglicht:
git push github master:deploy
(die oder aktualisiert, eine deploy
auf Remote-github
schafft aber lokale Zweig master
, nicht lokalen Zweig deploy
verwendet wird), während das Verbot:
git push github deploy:oops
(die schiebt die lokaledeploy
zu einem Zweig mit dem Namen oops
).
Wenn Sie kompliziertere Regeln haben möchten, schreiben Sie sie auf. Beachten Sie, dass Sie $2
sowie $1
überprüfen können, wenn Sie verhindern möchten, dass git push https://github.com/...
Ihren eigenen Haken umgeht. Natürlich, wenn Sie entschlossen sind, Ihren eigenen Haken zu umgehen, könnten Sie einfach git push --no-verify
ausführen, um Ihren Haken zu deaktivieren.