En plus de changer l'URL push en quelque chose d'invalide (par exemple git remote set-url --push origin DISABLED), on peut également utiliser le pre-pushhook.
Un moyen rapide d'arrêter git pushest de créer un lien symbolique /usr/bin/falsepour être le crochet:
$ ln -s /usr/bin/false .git/hooks/pre-push
$ git push
error: failed to push some refs to '...'
L'utilisation d'un crochet permet un contrôle plus fin des poussées si cela est souhaitable. Voir .git/hooks/pre-push.samplepour un exemple de la façon d'empêcher l'envoi de commits de travail en cours.
Pour éviter de pousser vers une branche spécifique ou pour limiter la poussée vers une seule branche, ceci dans un exemple de hook:
$ 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" ]]
Un dépôt de test avec plusieurs télécommandes:
$ git remote -v
origin ../gitorigin (fetch)
origin ../gitorigin (push)
upstream ../gitupstream (fetch)
upstream ../gitupstream (push)
Pousser vers originest autorisé:
$ 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
Pousser vers une autre télécommande n'est pas autorisé:
$ git push upstream
error: failed to push some refs to '../gitupstream'
Notez que le pre-pushscript de hook peut être modifié pour, entre autres, afficher un message à stderr indiquant que le push a été désactivé.