【问题标题】:specify which hook to skip on git commit --no-verify指定在 git commit --no-verify 上跳过哪个钩子
【发布时间】:2018-09-14 14:30:31
【问题描述】:

如果有办法在使用--no-verify 时准确指定要跳过哪个git-hook?或者除了--no-verify 之外还有其他标志可以实现这一点吗?也许只是一个只跳过pre-commit的标志?

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

有时我想--no-verify pre-commit 但仍然希望commit-msg 运行。

似乎有很多类似这样的 SO 帖子,但没有什么比使用 --no-verify 选择性跳过更好的了。

【问题讨论】:

    标签: githooks pre-commit-hook pre-commit


    【解决方案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"

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2021-01-04
      • 2012-02-24
      相关资源
      最近更新 更多