Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么git不恢复';t调用预提交和提交消息钩子?_Git - Fatal编程技术网

为什么git不恢复';t调用预提交和提交消息钩子?

为什么git不恢复';t调用预提交和提交消息钩子?,git,Git,使用strace,我注意到git revert只调用两个钩子: 准备提交消息 提交后 但是git commit调用了以下四个: 预提交 准备提交消息 提交消息 提交后 既然git revert生成了一个提交,为什么它不调用相同的呢 作为git提交的钩子 我在Git邮件列表上问了这个问题,但没有得到回应。所以我在这里问 当我实现一个钩子来检测时,我最终研究了这个问题 和拒绝还原合并提交的提交,因为它们是 我尝试将其实现为一个commit-msg钩子来搜索字符串 提交消息中的“这将恢复提交

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

  • 准备提交消息
  • 提交后
但是git commit调用了以下四个:

  • 预提交
  • 准备提交消息
  • 提交消息
  • 提交后
既然git revert生成了一个提交,为什么它不调用相同的呢 作为git提交的钩子

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

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

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

所以,现在我将我的检查作为预接收挂钩来实现。但我发现 将所有接收前检查也作为 预提交或提交消息挂钩,以便在 提交时间,而不仅仅是推送时间。

。但此代码(请参见上面的链接)包含以下片段:

    if (!(flags & VERIFY_MSG))
            argv_array_push(&cmd.args, "-n");
这意味着默认情况下它运行
git commit-n
-n
标志:

绕过预提交和提交消息挂钩

正如在设置
VERIFY_MSG
的内容中所指出的那样,它们是交互式的“编辑”或“重写”等,但不是
git cherry pick


请注意,一旦sequencer完成,它将调用您的重写后钩子(如果您有一个钩子),因此您应该将检查放在那里。正如您所注意到的,您可以专门编辑提交消息,如果您这样做,似乎应该使用您的提交消息钩子,但事实并非如此。

需要澄清的是,恢复提交是否不会触发客户端钩子或服务器端钩子?我认为您可以创建一个服务器端钩子来检测这样的提交,然后阻止它。但是+1是一个很好的问题。问题是git revert命令没有调用git commit命令调用的所有客户端钩子。您的领导让我找到git revert使用-n标志调用git commit的原因。它发生在2005年Junio Hamano的commit 9fa4db544e2e上!我知道了,但是由于您可以在git revert中编辑提交消息,因此我认为有必要在默认情况下进行预提交和调用提交消息。无论如何,我会把这个讨论带到Git的邮件列表中。但是,我检查了,git revert没有调用重写后钩子。即使它这样做了,因为它是一个“post”钩子,所以它也不能中止命令。但是你回答了我的问题。谢谢哦,对了,重写后钩子调用仅在sequencer被用于
git rebase-i
时使用。