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-push
hook.
Un moyen rapide d'arrêter git push
est de créer un lien symbolique /usr/bin/false
pour ê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.sample
pour 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 origin
est 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-push
script de hook peut être modifié pour, entre autres, afficher un message à stderr indiquant que le push a été désactivé.