Abgesehen davon, dass die Push-URL in etwas Ungültiges geändert wird (z. B. git remote set-url --push origin DISABLED
), kann man auch den pre-push
Hook verwenden.
Ein schneller Weg, um anzuhalten, git push
ist Symlink /usr/bin/false
, um der Haken zu sein:
$ ln -s /usr/bin/false .git/hooks/pre-push
$ git push
error: failed to push some refs to '...'
Die Verwendung eines Hakens ermöglicht bei Bedarf eine feinkörnigere Steuerung der Stöße. Hier finden Sie .git/hooks/pre-push.sample
ein Beispiel, wie Sie verhindern können, dass Work-in-Progress-Commits verschoben werden.
Um zu verhindern, dass auf einen bestimmten Zweig verschoben wird, oder um das Verschieben auf einen einzelnen Zweig zu beschränken, wird dies in einem Beispielhaken beschrieben:
$ cat .git/hooks/pre-push
#!/usr/bin/sh
# An example hook script to limit pushing to a single remote.
#
# This hook is called with the following parameters:
#
# $1 -- Name of the remote to which the push is being done
# $2 -- URL to which the push is being done
#
# If this script exits with a non-zero status nothing will be pushed.
remote="$1"
url="$2"
[[ "$remote" == "origin" ]]
Ein Test-Repo mit mehreren Fernbedienungen:
$ git remote -v
origin ../gitorigin (fetch)
origin ../gitorigin (push)
upstream ../gitupstream (fetch)
upstream ../gitupstream (push)
Pushing to origin
ist erlaubt:
$ git push origin
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 222 bytes | 222.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ../gitorigin
* [new branch] master -> master
Das Drücken auf eine andere Fernbedienung ist nicht zulässig:
$ git push upstream
error: failed to push some refs to '../gitupstream'
Beachten Sie, dass das pre-push
Hook-Skript geändert werden kann, um unter anderem eine Nachricht an stderr zu drucken, die besagt, dass der Push deaktiviert wurde.