我已经阅读了很多关于保护远程分支的文章...
然而,我想在一个Git钩子中捕获以下本地仓库命令:
git branch -d abranchthatshouldnotbedeleted
我想要钩住那条命令,并且与我做好的“受保护分支”列表文件进行分析,然后进行简单的检查来允许或拒绝删除操作。
我的某些分支现在处于被管理的状态,必须得到保护。
我已经阅读了很多关于保护远程分支的文章...
然而,我想在一个Git钩子中捕获以下本地仓库命令:
git branch -d abranchthatshouldnotbedeleted
Git目前没有钩子可以用来实现您想要的功能。请参阅git help hooks
以获取可用钩子列表。
您可能需要考虑其他方法。例如,您可以在包装脚本或shell函数中包装git
,并进行自己的解析以防止您删除分支:
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 "$@"
}
git --git-dir=/foo.git branch -d abranchthatshouldnotbedeleted
这样的调用,但你明白了。也许你可以使用 git rev-parse --parseopt
使其更加健壮。由于GitHub 不允许pre-receive hook(只有post-receive ones),我建议将其推送到一个中间本地仓库,由Gitolite(一个授权层,通过ssh或http访问您的git仓库)保护。
Gitolite可以帮助编写各种访问规则,包括保护分支免受删除的影响。
如果允许推送,则后提交钩子可以自动将其推送到GitHub。