我有一个中央裸存储库,团队发布(推送)他们的提交。 在这个主存储库中,我想禁用标记删除和重命名。
是否有像钩子之类的解决方案?
答案 0 :(得分:20)
git help hooks
包含有关挂钩的文档。当Git即将创建/移动/删除引用时,将调用update
挂钩。每个引用都会调用一次进行更新,并给出:
如果钩子以非零退出代码退出,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