禁用标签删除功能

17

我有一个中央裸仓库,团队成员在其中发布(push)他们的提交。

在这个主要的仓库中,我想禁用标签的删除和重命名。

是否有类似挂钩(hook)之类的解决方案?

1个回答

24

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

2
你可能想要链接到文档或更详细地解释如何集成。 - Daenyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接