我准备了很多关于保护远程分支的文章...
但是,我想在 git hook 中捕获以下 LOCAL repo 命令:
git branch -d abranchthatshouldnotbedeleted
我想挂钩该命令并根据我制作的“受保护分支”的分支列表文件对其进行分析,并进行简单检查以允许或拒绝删除。
我的某些分支现在被锁定在一个声明中,它们现在被管理并且必须受到保护。
由于 GitHub不允许pre -receive钩子(仅post-receive钩子),我建议推送到受Gitolite保护的中间本地存储库(授权层,通过 ssh 或 http 访问您的 git 存储库)。
Gitolite 可以帮助编写各种访问规则,包括保护分支不被删除。
如果允许推送,则提交后挂钩可以自动将其推送到 GitHub。
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
它来使其更健壮。