防止`git`用给定的提交消息推送提交

时间:2017-02-05 08:13:16

标签: git repository workflow

如何防止git在提交按摩中推送包含给定字符串的提交,例如“不要推”?

上下文/用例:

我的典型工作流程是: 我破解黑客,将工作分成微提交, 一旦事情有效,我就会重写历史,改变提交的顺序,合理地将它们分组,然后压缩成更大的有意义的部分。 一旦准备就绪,事情就可以推进了!

现在我希望git能够防止我意外地进入仍在进行中的存储库提交。 我认为保持“不要推”作为提交消息的一部分。 如何让git在git push之后达到此类提交时自动阻止我推送?

(对于预接收挂钩解决方案:我们将github视为示例服务,AFAIK does not allow pre-recevie hooks除外,其“企业”版本除外)

1 个答案:

答案 0 :(得分:8)

您可以使用pre-push挂钩,但这仍然是可以绕过的本地挂钩 见pre-push example which does look at each commit message

# Check for foo commit
        commit=`git rev-list -n 1 --grep '^foo' "$range"`
        if [ -n "$commit" ]
        then
echo "ERROR: git pre-push hook found commit message starting with 'foo' in $local_ref"

但最好的方法仍然是服务器端的pre-receive hook。这样,该策略就会对所有贡献者实施。这并非总是可行(当您无法直接访问远程服务器时,如GitHub,BitBucket或GitLab.com)