Ответ 1
git help hooks
содержит документацию о крючках. Крючок update
вызывается, когда Git собирается создать/переместить/удалить ссылку. Он вызывается один раз для каждой ссылки для обновления и дается:
- 1-й аргумент: имя ссылки (например, refs/tags/v1.0)
- 2-й аргумент: SHA1 объекта, в котором теперь указывает ссылка (все нули, если ссылка в настоящее время не существует)
- Третий аргумент: SHA1 объекта, где пользователь хочет ссылку на точку (все нули, если ссылка должна быть удалена).
Если хук выходит с ненулевым кодом выхода, git
не будет обновлять ссылку, и пользователь получит сообщение об ошибке.
Итак, чтобы решить вашу конкретную проблему, вы можете добавить следующее к вашему крюку update
:
#!/bin/sh
log() { printf '%s\n' "$*"; }
error() { log "ERROR: $*" >&2; }
fatal() { error "$*"; exit 1; }
case $1 in
refs/tags/*)
[ "$3" != 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to delete tags"
[ "$2" = 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to move tags"
;;
esac