为什么git-revert不会调用pre-commit和commit-msg钩子?

时间:2018-02-18 14:45:39

标签: git

使用strace我注意到git-revert只调用两个钩子:

  • 准备提交-MSG
  • 后提交

但是git-commit会调用这四个:

  • 预提交
  • 准备提交-MSG
  • 提交-MSG
  • 后提交

由于git-revert生成一个提交,为什么不调用它 钩子作为git-commit?

我在Git邮件列表上问了这个问题,但没有回复。所以我在这里问。

当我实现一个钩子来检测时,我最终研究了这个 并拒绝提交合并提交的提交,因为它们是 troublesome

我尝试将其实现为commit-msg钩子来搜索字符串 “这会在提交消息中恢复提交SHA-1”。但是git-revert 不会调用commit-msg钩子。

所以,现在我将支票作为预接收挂钩实现了。但我发现 将所有预先接收检查也实现为一个非常有用 pre-commit或commit-msg hook,以便我可以检测到问题 提交时间而不仅仅是在推送时间。

1 个答案:

答案 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

请注意,一旦顺控程序完成,它将调用你的重写后挂钩(如果你有的话),所以你应该把检查放在那里。正如你所说,你可以专门编辑提交消息,如果你这样做,似乎你的提交消息钩子应该被使用,但它不是。