python预提交工具可以将子目录视为项目的基础吗?

ing*_*ger 8 python pre-commit.com

我有一个这样的回购协议:

myrepo/
      .git
      tool1/  
           src/main.py
           tests/test.py
           .pre-commit-config.yaml
Run Code Online (Sandbox Code Playgroud)

配置在哪里:

repos:
- repo: local
  hooks:
    - id: pytest-cov
      name: pytest coverage
      stages: [push]
      language: system
      entry: pwd  # originally: pytest testtool --cov --cov-fail-under=0 
      types: [python]
      pass_filenames: false
Run Code Online (Sandbox Code Playgroud)

将条目更改为“pwd”只是为了查看预提交上下文中的 basedir 是什么。现在,当我从 myrepo/tool1 目录运行此命令时,pre-commit run --hook-stage=push --verbosepwd 会说“myrepo”,而不是“myrepo/tool1” 。我需要在 tool1 中运行,因为所有路径等都与之相关。

是否有一些设置或其他方法来运行预提交,以便基目录为 myrepo/tool1?或者该项目真的必须位于存储库的根目录中吗?

Ant*_*ile 16

您可以将配置放在您所看到的任何地方,但 git hooks 本身始终从存储库的根目录运行(这就是git工作原理)。每个存储库也只有一组 git hooks,因此 monorepo 的功能对于 git hooks 来说并没有真正的意义

跟踪器上有一些令人感兴趣的问题:预提交/预提交/问题搜索:monorepo

建议是围绕任何有问题的工具编写一个包装器,并cd在需要更改工作目录时使用 - 例如从#1417 开始:

-   repo: local
    hooks:
    -   id: go-unit-tests
        name: run go test s(go test)
        language: system
        entry: bash -c 'cd subdir && exec go test ./...'
        pass_filenames: false
        types: [go]
        files: ^subdir/
Run Code Online (Sandbox Code Playgroud)

免责声明:我是预提交的作者