禁用标签删除

Jok*_*ker 14 tags git

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

有钩子之类的解决方案吗?

Ric*_*sen 20

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

  • 第一个参数:引用名称(例如,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
Run Code Online (Sandbox Code Playgroud)

  • 您可能想要链接到文档或解释有关如何集成的更多信息。 (2认同)