使用strace我注意到git-revert只调用两个钩子:
但是git-commit会调用这四个:
由于git-revert生成一个提交,为什么不调用它 钩子作为git-commit?
我在Git邮件列表上问了这个问题,但没有回复。所以我在这里问。
当我实现一个钩子来检测时,我最终研究了这个 并拒绝提交合并提交的提交,因为它们是 troublesome
我尝试将其实现为commit-msg钩子来搜索字符串 “这会在提交消息中恢复提交SHA-1”。但是git-revert 不会调用commit-msg钩子。
所以,现在我将支票作为预接收挂钩实现了。但我发现 将所有预先接收检查也实现为一个非常有用 pre-commit或commit-msg hook,以便我可以检测到问题 提交时间而不仅仅是在推送时间。
答案 0 :(得分:2)
The sequencer code actually runs git commit
to produce the commit。但是这段代码(见上面的链接)包含片段:
if (!(flags & VERIFY_MSG))
argv_array_push(&cmd.args, "-n");
表示默认情况下运行git commit -n
。 -n
标志:
绕过预提交和commit-msg挂钩
如the git commit
documentation.中所述,设置VERIFY_MSG
的内容是交互式rebase"编辑"或" reword"等等,但不是git cherry-pick
。
请注意,一旦顺控程序完成,它将调用你的重写后挂钩(如果你有的话),所以你应该把检查放在那里。正如你所说,你可以专门编辑提交消息,如果你这样做,似乎你的提交消息钩子应该被使用,但它不是。