跳过 Git 提交挂钩
我正在查看一个 Git 挂钩,它在 Python 代码中查找打印语句。如果找到 print 语句,它会阻止 Git 提交。
我想覆盖这个钩子,有人告诉我有一个命令可以这样做。我一直没能找到它。有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在查看一个 Git 挂钩,它在 Python 代码中查找打印语句。如果找到 print 语句,它会阻止 Git 提交。
我想覆盖这个钩子,有人告诉我有一个命令可以这样做。我一直没能找到它。有什么想法吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
也许(来自
git commit
手册页):正如 Blaise 所评论的,
-n
对于某些命令可以具有不同的角色。例如,
git push -n
实际上是一个干 -运行推送。只有 git push --no-verify 会跳过该钩子。
注意:Git 2.14.x/2.15 改进了
--no-verify
行为:请参阅 提交 680ee55(2017 年 8 月 14 日)作者:凯文·威尔福德 (``)。
(由 Junio C Hamano --
gitster
-- 合并于 提交c3e034f,2017 年 8 月 23 日)Davi Lima 指出在评论中
gitcherry-pick
确实不 支持 --no-verify。因此,如果cherry-pick触发了预提交挂钩,您可能会像这篇博文,必须以某种方式评论/禁用该挂钩才能让您的 gitcherry-pick 继续进行。
在解决合并冲突后,如果发生 git rebase --continue,则需要执行相同的过程。
在 Git 2.36(2022 年第 2 季度)中,
run_commit_hook()
的调用者可以了解它“成功”是因为挂钩成功还是因为没有任何挂钩。请参阅 提交 a8cc594 (已修复 提交 4369e3a1), 提交 9f6e63b(2022 年 3 月 7 日),作者:Ævar Arnfjörð Bjarmason (
avar
)。(由 Junio C Hamano --
gitster
-- 合并于 提交7431379,2022 年 3 月 16 日)Maybe (from
git commit
man page):As commented by Blaise,
-n
can have a different role for certain commands.For instance,
git push -n
is actually a dry-run push.Only
git push --no-verify
would skip the hook.Note: Git 2.14.x/2.15 improves the
--no-verify
behavior:See commit 680ee55 (14 Aug 2017) by Kevin Willford (``).
(Merged by Junio C Hamano --
gitster
-- in commit c3e034f, 23 Aug 2017)Davi Lima points out in the comments the
git cherry-pick
does not support --no-verify.So if a cherry-pick triggers a pre-commit hook, you might, as in this blog post, have to comment/disable somehow that hook in order for your git cherry-pick to proceed.
The same process would be necessary in case of a
git rebase --continue
, after a merge conflict resolution.With Git 2.36 (Q2 2022), the callers of
run_commit_hook()
to learn if it got "success" because the hook succeeded or because there wasn't any hook.See commit a8cc594 (fixed with commit 4369e3a1), commit 9f6e63b (07 Mar 2022) by Ævar Arnfjörð Bjarmason (
avar
).(Merged by Junio C Hamano --
gitster
-- in commit 7431379, 16 Mar 2022)使用
comment
和no verify
没有任何进一步的问题:With both
comment
andno verify
without any further issue:--no-verify
有效,但就我而言,我不想一直将参数放在终端上。所以我选择了更具侵略性的东西。如果你想全局禁用 git hooks,你可以尝试运行这个:
但是,如果你想保持原来的状态,只需在终端中运行以下命令:
如果你不想要它要成为全局的,只需删除参数:
--global
我用 Git 2.16.3 测试了它。
--no-verify
works, but in my case, I didn't want to put the parameter all the time on the terminal. So I opted for something a little more aggressive.If you want to disable
git hooks
globally, you could try running this:But, if you want to leave it as it was before, just run the following command in your terminal:
If you do not want it to be global, just remove the argument:
--global
I tested it with Git 2.16.3.
来自
man githooks
:From
man githooks
:例如,-n 或 --no-verify 对于“git merge --continue”之后的提交不起作用。
这是另一个更粗略的想法。
.git/hooks/pre-commit
即可。-n or --no-verify does not work for a commit after 'git merge --continue' for example.
So here is another rougher idea.
.git/hooks/pre-commit
with symbol '#'.由于某种原因,
--no-verify
对于这个特定的钩子不起作用:prepare-commit-msg
如果您也遇到了这个问题,请尝试:
For some reason,
--no-verify
does not work for me with this particular hook:prepare-commit-msg
If you too are running into this issue, try:
SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^(.>).$/- 签署人:\1/p')
grep -qs "^$SOB" "$1" ||回声“$SOB”>> “1美元”
SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^(.>).$/- signed-off-by: \1/p')
grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"