指定在 git commit --no-verify 上跳过哪个钩子

Jer*_*emy 6 pre-commit pre-commit-hook githooks

是否有办法准确指定git-hook使用时要跳过哪些内容--no-verify--no-verify或者除了完成此任务之外还有其他标志吗?也许只是一个只能跳过的标志pre-commit

我有两个经常使用的钩子,pre-commitcommit-msgpre-commit运行我的 linting、流程检查和一些单元测试。commit-msg将我的分支名称附加到提交消息的末尾。

有时我很想跑,--no-verifypre-commit还是想跑commit-msg

似乎有很多与此类似的 SO 帖子,但没有什么比选择性跳过--no-verify.

kel*_*vin 7

跳绳

如果您能够修改钩子,则可以为每个钩子添加一个切换开关。

特定验证切换的示例pre-commit.sample

# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --bool hooks.allownonascii)
Run Code Online (Sandbox Code Playgroud)

因此,为了能够切换整个pre-commit hook,可以将其添加到它的开头:

enabled="$(git config --bool hooks.pre-commit.enabled)"

if test "$enabled" != true
then
    echo 'Warning: Skipping pre-commit hook...'
    exit
fi
Run Code Online (Sandbox Code Playgroud)

使用示例:

git -c hook.pre-commit.enabled=false commit
Run Code Online (Sandbox Code Playgroud)

混叠

注意:两种类型的别名都会中断 制表符补全

Agit alias可以简化这个:

git config --global alias.noprecommit \
  '!git -c hook.pre-commit.enabled=false'
Run Code Online (Sandbox Code Playgroud)

这样,您可以通过以下调用提交并跳过挂钩:

git noprecommit commit
Run Code Online (Sandbox Code Playgroud)

您还可以使用shellalias(例如~/.bashrc:):

alias gitnoprecommit='git -c hook.pre-commit.enabled=false'
Run Code Online (Sandbox Code Playgroud)

使用示例:

gitnoprecommit commit
Run Code Online (Sandbox Code Playgroud)


小智 7

如果您想提交并绕过单个预提交挂钩,请使用 \xc2\xa0

\n
\n

SKIP=hook_name git commit -m "commit_message"

\n
\n

SKIP 环境变量是一个逗号分隔的钩子 ID 列表。这允许您跳过单个挂钩,而不是 --no-verifying 整个提交。

\n
\n

SKIP=flake8,mypy git commit -m "commit_message"

\n
\n