我准备了很多关于保护远程分支的文章......
但是我想在git钩子中捕获以下LOCAL repo命令:
git branch -d abranchthatshouldnotbedeleted
我想挂钩该命令并根据我制作的“受保护分支”的分支列表文件进行分析,并进行简单的检查以允许或拒绝删除。
我的某些分支现在被锁定在现在管理的状态,必须受到保护。
答案 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
来使其更加健壮。