0

pre-commit我在文件中有以下回购.pre-commit-config.yaml

-   repo: local
    hooks:
    -   id: check_pip
        name: Check pip file
        description: This hook checks if requirements-dev.txt is up to date.
        language: system
        entry: python -m scripts.check_pip_requirements
        args: ["--compare"]

但它一直给我错误:

错误:无法识别的参数:.pre-commit-config.yaml

因为它将文件名作为参数传递给我的 python 脚本。我怎样才能防止这种情况?

4

2 回答 2

2

稍微清理一下您的示例 - 并files仅在必要的文件更改时运行:

-   repo: local
    hooks:
    -   id: check_pip
        name: Check pip file
        description: This hook checks if requirements-dev.txt is up to date.
        language: system
        entry: python -m scripts.check_pip_requirements --compare
        files: ^requirements-dev.txt$
        pass_filenames: false

请注意,我做了几件事:

  • args对钩子没有意义local,你可以把它放进去entry
  • pass_filenames(正如您所做的那样)-pre-commit是一个基于将文件名传递给可执行文件的框架,但您可以将其关闭
  • files:这将使钩子只有在requirements-dev.txt更改时才会被触发

或者(如果您希望外部更改requirements-dev.txt需要运行此挂钩)您可以删除files并使用always_run: true


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

于 2020-09-24T00:19:54.933 回答
1

我花了很长时间弄清楚是什么原因造成的以及如何解决这个问题。它没有很好地记录,最终我通过反复试验修复了它。我们必须pass_filenames: false在我们的钩子中使用:

-   repo: local
    hooks:
    -   id: check_pip
        name: Check pip file
        description: This hook checks if requirements-dev.txt is up to date.
        language: system
        entry: python -m scripts.check_pip_requirements
        pass_filenames: false
        args: ["--compare"]
于 2020-09-23T21:16:06.267 回答