3

我准备了很多关于保护远程分支的文章...

但是,我想在 git hook 中捕获以下 LOCAL repo 命令:

git branch -d abranchthatshouldnotbedeleted

我想挂钩该命令并根据我制作的“受保护分支”的分支列表文件对其进行分析,并进行简单检查以允许或拒绝删除。

我的某些分支现在被锁定在一个声明中,它们现在被管理并且必须受到保护。

4

2 回答 2

1

由于 GitHub不允许pre -receive钩子(仅post-receive钩子),我建议推送到受Gitolite保护的中间本地存储库(授权层,通过 ssh 或 http 访问您的 git 存储库)。

Gitolite 可以帮助编写各种访问规则,包括保护分支不被删除

如果允许推送,则提交后挂钩可以自动将其推送到 GitHub。

于 2013-01-11T07:12:05.790 回答
1

Git(当前)没有可以用来做你想做的事情的钩子。有关git help hooks可用挂钩的列表,请参阅。

您可能需要考虑不同的方法。例如,您可以包装git一个包装脚本或 shell 函数,它们自己进行解析以防止您删除分支:

git() {
    [ "${1}" != branch ] ||
    { [ "$2" != -d ] && [ "$2" != -D ]; } ||
    case $3 in
        abranchthatshouldnotbedeleted) false;;
        *) true;;
    esac ||
    { printf %s\\n "ERROR: branch $3 must not be deleted" >&2; exit 1; }
    command git "$@"
}

上面的 shell 函数非常原始,不处理类似的调用git --git-dir=/foo.git branch -d abranchthatshouldnotbedeleted,但你明白了。也许您可以使用git rev-parse --parseopt它来使其更健壮。

于 2013-01-11T19:47:13.003 回答