使用pre-commit,如何在提交之前使用某些挂钩,在推送之前使用其他挂钩

问题描述

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

当然不是用黑色格式化的。

解决方法

您的配置是正确的,除了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的作者

,

编辑:我没有注意到您使用的是称为预提交的第三方软件包 相反,我认为您正在使用内置的预提交钩子中的git。

预提交
https://pre-commit.com/

看着您的配置似乎是正确的,可能会错过一件事,因为我在评论中说,请确保已安装预推式:

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

如果您想使用钩子内置的git:

https://git-scm.com/docs/githooks#_pre_push

使用预推钩

在您的.git/hooks

内部
$ touch pre-push 

然后放上钩子。

非常简单。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...