【问题标题】:With pre-commit, how to use some hooks before commit and others before push使用预提交,如何在提交之前使用一些钩子,在推送之前使用其他钩子
【发布时间】:2026-01-21 12:05:02
【问题描述】:

一些钩子可能需要一段时间才能运行,我想在推送之前运行它们,但不是在每次特定提交之前运行(例如,pylint 可能有点慢)。

我看过以下内容:

但仍然不清楚我应该如何设置它。

这是我尝试过的:

default_stages: [commit]
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.1.0
    hooks:
      - id: end-of-file-fixer
      - id: trailing-whitespace
  - repo: https://github.com/psf/black
    rev: 19.10b0
    hooks:
      - id: black
        stages: [push]

因此,我希望前几个钩子在提交之前运行(它们会这样做),但我希望黑色在推送之前运行,但事实并非如此。

为了测试我是否创建了以下文件:

"""This is a docstring."""

print('this should be formatted')

这肯定不是黑色格式化的。

【问题讨论】:

    标签: python git pre-commit-hook pre-commit pre-commit.com


    【解决方案1】:

    您的配置是正确的,除了 pre-commit/pre-commit-hooks set stages themselves 中的空格钩子,因此它们不会受到 default_stages 的影响

    稍微调整你的配置:

    repos:
      - repo: https://github.com/pre-commit/pre-commit-hooks
        rev: v3.1.0
        hooks:
          - id: end-of-file-fixer
            stages: [commit]
          - id: trailing-whitespace
            stages: [commit]
      - repo: https://github.com/psf/black
        rev: 19.10b0
        hooks:
          - id: black
            stages: [push]
    

    接下来,您需要确保两个挂钩脚本都已安装

    您可以使用以下命令同时安装 pre-commitpre-push 提交:

    pre-commit install --hook-type pre-commit --hook-type pre-push
    

    或者您可以单独运行它们:

    pre-commit install  # installs .git/hooks/pre-commit
    pre-commit install --hook-type pre-push  # installs .git/hooks/pre-push
    

    注意第二个命令直接来自the documentation on using pre-push


    免责声明:我是 pre-commit 和 pre-commit-hooks 的作者

    【讨论】: