问:

我正在查看一个 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开始!

Logo

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

更多推荐