指定在 git commit --no-verify 上跳过哪个钩子
Posted
技术标签:
【中文标题】指定在 git commit --no-verify 上跳过哪个钩子【英文标题】:specify which hook to skip on git commit --no-verify 【发布时间】:2018-09-14 14:30:31 【问题描述】:如果有办法在使用--no-verify
时准确指定要跳过哪个git-hook
?或者除了--no-verify
之外还有其他标志可以实现这一点吗?也许只是一个只跳过pre-commit
的标志?
我有两个经常使用的钩子,pre-commit
和 commit-msg
。 pre-commit
运行我的 linting、流检查和一些单元测试。 commit-msg
将我的分支名称附加到提交消息的末尾。
有时我想--no-verify
pre-commit
但仍然希望commit-msg
运行。
似乎有很多类似这样的 SO 帖子,但没有什么比使用 --no-verify
选择性跳过更好的了。
【问题讨论】:
【参考方案1】:跳过
如果您能够修改挂钩,则可以为每个挂钩添加一个切换开关。
来自pre-commit.sample
的特定验证切换示例:
# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --bool hooks.allownonascii)
因此,要启用切换整个 pre-commit
hook,可以将其添加到
它的开头:
enabled="$(git config --bool hooks.pre-commit.enabled)"
if test "$enabled" != true
then
echo 'Warning: Skipping pre-commit hook...'
exit
fi
使用示例:
git -c hook.pre-commit.enabled=false commit
别名
注意:两种类型的别名break制表符补全。
git alias
可以简化这一点:
git config --global alias.noprecommit \
'!git -c hook.pre-commit.enabled=false'
这样,您可以通过以下调用提交并跳过 hook:
git noprecommit commit
您也可以使用shell alias
(例如:~/.bashrc
):
alias gitnoprecommit='git -c hook.pre-commit.enabled=false'
使用示例:
gitnoprecommit commit
【讨论】:
例如git -c hooks.pre-commit.enabled=false cherry-pick --continue
。您需要将默认值添加到 git config(一次性),如下所示:git config hooks.pre-commit.enabled true
【参考方案2】:
如果您想提交并绕过单个预提交挂钩,请使用
SKIP=hook_name git commit -m "commit_message"
SKIP 环境变量是一个逗号分隔的钩子 ID 列表。这允许您跳过单个钩子而不是 --no-verifying 整个提交。
SKIP=flake8,mypy git commit -m "commit_message"
【讨论】:
以上是关于指定在 git commit --no-verify 上跳过哪个钩子的主要内容,如果未能解决你的问题,请参考以下文章