git branch delete - HOOK

时间:2013-01-11 05:01:18

标签: git github branch hook

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

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

git branch -d abranchthatshouldnotbedeleted

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

我的某些分支现在被锁定在现在管理的状态,必须受到保护。

2 个答案:

答案 0 :(得分:1)

自GitHub doesn't allow pre-receive hook(仅post-receive ones)以来,我建议推送到受Gitolite authorization layer保护的中间本地回购,通过ssh或http访问你的git repo)。

Gitolite可以帮助编写所有类型的访问规则,包括protecting a branch against deletion

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

答案 1 :(得分: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来使其更加健壮。