禁用标签删除

时间:2011-06-17 19:43:33

标签: git tags

我有一个中央裸存储库,团队发布(推送)他们的提交。 在这个主存储库中,我想禁用标记删除和重命名。

是否有像钩子之类的解决方案?

1 个答案:

答案 0 :(得分:20)

git help hooks包含有关挂钩的文档。当Git即将创建/移动/删除引用时,将调用update挂钩。每个引用都会调用一次进行更新,并给出:

  • 第一个参数:引用名称(例如,refs / tags / v1.0)
  • 第二个参数:引用当前指向的对象的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