通过预提交,如何在提交之前使用一些钩子,在推送之前使用其他钩子

bax*_*axx 17 python git pre-commit pre-commit-hook pre-commit.com

有些钩子可能需要一段时间才能运行,我想在推送之前运行它们,但不是在每次特定提交之前运行(例如,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]
Run Code Online (Sandbox Code Playgroud)

由此,我期望前几个钩子在提交之前运行(它们确实如此),但我期望黑色在推送之前运行,但事实并非如此。

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

"""This is a docstring."""

print('this should be formatted')
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*ile 29

您的配置是正确的,除了pre-commit/pre-commit-hooks 设置stages自己的空白挂钩,这样它们就不会受到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]
Run Code Online (Sandbox Code Playgroud)

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

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

pre-commit install --hook-type pre-commit --hook-type pre-push
Run Code Online (Sandbox Code Playgroud)

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

pre-commit install --hook-type pre-commit --hook-type pre-push
Run Code Online (Sandbox Code Playgroud)

请注意,第二个命令直接来自使用预推送的文档


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