我有一个中央裸仓库,团队成员在其中发布(push)他们的提交。
在这个主要的仓库中,我想禁用标签的删除和重命名。
是否有类似挂钩(hook)之类的解决方案?
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