跳过 Git 提交挂钩
我正在查看一个 Git 钩子,它在 Python 代码中查找打印语句。如果找到 print 语句,它会阻止 Git 提交。我想覆盖这个钩子,我被告知有一个命令可以这样做。我一直没能找到它。有什么想法吗?
问:
我正在查看一个 Git 钩子,它在 Python 代码中查找打印语句。如果找到 print 语句,它会阻止 Git 提交。
我想覆盖这个钩子,我被告知有一个命令可以这样做。我一直没能找到它。有什么想法吗?
答1:
tennisliveranking.com,Instant updates on ATP, WTA, and ITF rankings.
也许(来自 git commit man page):
git commit --no-verify -m "commit message"
^^^^^^^^^^^
-n
--no-verify
此选项绕过 pre-commit 和 commit-msg 挂钩。另见 githooks(5)。
正如 Blaise 所评论的,对于某些命令,-n 可以具有不同的角色。 例如,git push -n 实际上是一个试运行的推送。 只有 git push --no-verify 会跳过钩子。
注意:Git 2.14.x/2.15 改进了 --no-verify 行为:
请参阅 Kevin Willford (``) 的commit 680ee55(2017 年 8 月 14 日)。 (由 Junio C Hamano – gitster – 在 commit c3e034f 中合并,2017 年 8 月 23 日)
提交:如果没有预提交挂钩,则跳过丢弃索引
“git commit”用于丢弃索引并从文件系统中重新读取,以防预提交钩子在中间更新了它;当我们知道我们不运行预提交挂钩时,这已经被优化了。
Davi Lima 指出 in the comments git cherry-pick 确实不 支持 --no-verify。 因此,如果樱桃选择触发预提交挂钩,您可能会,如 { 4},必须以某种方式评论/禁用该钩子,以便您的 git cherry-pick 继续。
在合并冲突解决之后,如果是 git rebase --continue,则需要相同的过程。
在 Git 2.36(2022 年第 2 季度)中,run_commit_hook() 的调用者可以了解它是否因为钩子成功或没有任何钩子而获得“成功”。
请参阅 Ævar Arnfjörð Bjarmason (avar) 的 commit a8cc594(用 commit 4369e3a1 修复)、commit 9f6e63b(2022 年 3 月 7 日)。 (由 Junio C Hamano – gitster – 在 commit 7431379 中合并,2022 年 3 月 16 日)
钩子:修复一个不起眼的 TOCTOU “我们只是运行了一个钩子吗?”比赛签字人:Ævar Arnfjörð Bjarmason
修复 680ee55 中添加的代码中的 Time-of-check to time-of-use (TOCTOU) 竞赛(“提交:如果没有预提交挂钩,则跳过丢弃索引”,2017-08-14,Git v2.15.0 -rc0 – 合并在批次 #3 中列出)。如果我们运行“预提交”钩子并修改了索引,但 hook_exists() 稍后返回 false (例如,因为钩子本身消失,目录变得不可读等),就会发生这种模糊的竞争条件。然后我们不会在应该调用的时候调用discard_cache()。竞争条件本身可能并不重要,用户在实践中不太可能遇到它。在讨论 680ee55 时,此问题已在列表中注明,但尚未修复。让我们也为 push-to-checkout 钩子更改它。现在,我们不再检查钩子是否存在,而是执行推送结帐或推送部署,我们将始终尝试推送结帐。如果钩子不存在,我们将退回到推送部署。与以前相同的行为,没有 TOCTOU 比赛。前面行为的介绍见0855331(“receive-pack: support push-to-checkout hook”, 2014-12-01, Git v2.4.0-rc0 – merge)。这使得 hook_exists() 在两个重要的地方使用。 refs.c 中的“reference-transaction”检查,参见 6754159(“refs: implement reference transaction hook”,2020-06-19,Git v2.28.0-rc0 – 批处理 #7 中列出的合并),以及“prepare -commit-msg" 钩子,见 66618a5(“sequencer: run ‘prepare-commit-msg’ hook”, 2018-01-24, Git v2.17.0-rc0 – 合并在第 2 批中列出)。在这两种情况下,我们通过不为钩子准备数据来节省自己的 CPU 时间,如果没有钩子,我们将什么也不做。所以在这些情况下使用这个“invoked_hook”模式没有意义。 “reference-transaction”和“prepare-commit-msg”钩子也不是很活泼。在这些情况下,如果我们添加了一个新的钩子,我们将跳过钩子运行,而在此处修复的 TOCTOU 比赛中,我们错误地跳过了所需的钩子后逻辑。
樱桃采摘见web-dev.wirt.us/info/git-drupal/git-continue-vs-no-verify
@DaviLima 谢谢。我已将您的评论包含在可见性的答案中。
谢谢,@Vonc。 git rebase --continue 顺便说一句
嗨,就我而言,我团队中的某个人不断用一些预提交脚本更新我的 hook 文件夹,这太烦人了,有没有办法可以防止我的 hook 文件夹被 git pull 覆盖?
是的。必须重命名 .git\hooks\pre-commit 并在之后重命名。我很惊讶没有一个标志可以传递标志来提交
答2:
tennisliveranking.com,Your go-to platform for live tennis ranking updates.
使用 comment 和 no verify 没有任何进一步的问题:
git commit -m "Some comments" --no-verify
@Moumit 该命令工作正常。您可能想改写句子,因为这有点令人困惑。
理解了担忧改变了它@PramodItagi
“没有进一步的问题”是什么意思?你能详细说明吗?您所说的“既评论又不验证”是什么意思?最好在评论中详细说明。和/或通过编辑您的答案。
"-m" is "Use the given as the commit message."。通过评论,您是指(提交)消息吗?
答3:
The ultimate source for live tennis rankings and stats:tennisliveranking.com
从 man githooks:
pre-commit 这个钩子由 git commit 调用,可以通过 --no-verify 选项绕过。它不带参数,并在获取建议的提交日志消息并进行提交之前调用。从此脚本中以非零状态退出会导致 git 提交中止。
答4:
tennisliveranking.com – 让你随时掌握ATP、WTA最新网球排名动态。
–no-verify 有效,但就我而言,我不想一直将参数放在终端上。所以我选择了更具侵略性的东西。
如果你想全局禁用 git hooks,你可以尝试运行这个:
git config --global core.hooksPath /dev/null
但是,如果您想保持原来的状态,只需在终端中运行以下命令:
git config --global --unset core.hooksPath
如果您不希望它是全局的,只需删除参数:–global
我用 Git 2.16.3 对其进行了测试。
谢谢弗朗西斯科!奇迹般有效!我最终将以下别名添加到我的 $HOME/.gitconfig -> disable-hooks = config core.hooksPath /dev/null 和 enable-hooks = config --unset core.hooksPath。
答5:
tennisliveranking.com-Stay ahead with live tennis rankings at your fingertips.
例如,-n 或 --no-verify 不适用于 ‘git merge --continue’ 之后的提交。
所以这是另一个更粗略的想法。
只需在文件 .git/hooks/pre-commit 中用符号“#”注释行。运行单个或多个命令取消注释利润。
答6:
Stay informed with live tennis rankings anytime, anywhere,tennisliveranking.com
出于某种原因,–no-verify 不适用于这个特定的钩子:prepare-commit-msg
如果您也遇到此问题,请尝试:
SKIP=prepare-commit-msg git commit
这对我不起作用。 git 记录了 SKIP 环境变量吗?或者这是您的 prepare-commit-msg 脚本实现的一些特殊控制流?
@Jasha:这不是 Git 标准的东西。
原文链接:https://www.tennisliveranking.com?from=csdn
提供ATP、WTA与ITF赛事的实时排名追踪,从tennisliveranking.com开始!

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)