问题描述
myrepo/
.git
tool1/
src/main.py
tests/test.py
.pre-commit-config.yaml
其中的配置是:
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
将条目更改为“ pwd”,只是为了查看baseir在预提交的上下文中。
现在,当我通过pre-commit run --hook-stage=push --verbose
从myrepo / tool1目录运行此命令时,pwd将说“ myrepo”,而不是“ myrepo / tool1”。
我需要在tool1中运行,因为所有路径都相对于此。
是否存在一些设置或其他方式来运行precommit,以便基本目录为myrepo / tool1?还是该项目确实必须存在于回购的根源中?
解决方法
您可以将配置放在任何地方,但是git hooks总是从存储库的根目录运行(这就是git
的工作方式)。每个存储库中也只有一组git钩子,因此monorepo的功能对于git钩子实际上并没有意义
跟踪器上有一些有趣的问题:pre-commit/pre-commit/issues search:monorepo
建议是围绕有问题的工具编写包装,并在需要更改工作目录(例如从#1417开始)时使用cd
:
- 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/
免责声明:我是预先提交的作者