如何在pre-commit中排除migrations/目录?配置无效问题求助
解决pre-commit无法排除migrations/目录的问题
以下是几种可行的解决方法,按优先级排序:
1. 全局配置exclude规则(推荐)
在.pre-commit-config.yaml的最顶层添加全局exclude,所有hook都会自动跳过匹配的文件,无需逐个hook单独配置:
exclude: ^.*/migrations/ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: trailing-whitespace # 其他hook配置... - repo: https://github.com/python/mypy rev: v1.5.1 hooks: - id: mypy # 无需重复写exclude,全局规则会自动生效
正则^.*/migrations/会匹配所有路径中包含migrations/的目录(包括根目录和子目录下的migrations文件夹),确保所有迁移文件都被排除。
2. 修正单个hook的exclude正则
如果需要针对特定hook单独配置,检查正则是否覆盖了所有migrations子目录。比如针对mypy的配置:
- repo: https://github.com/python/mypy rev: v1.5.1 hooks: - id: mypy exclude: ^.*migrations/
注意:pre-commit的exclude使用Python正则语法,确保不要遗漏.*来匹配前置路径,或使用错误的锚定符。
3. 检查hook自身的配置文件
部分hook(如mypy)会读取自身的配置文件(如mypy.ini、pyproject.toml),可以在这些文件中添加排除规则作为双重保障:
比如在pyproject.toml中:
[tool.mypy] exclude = [".*migrations/"]
4. 清除pre-commit缓存
缓存可能导致规则不生效,执行以下命令清除缓存:
pre-commit clean
之后重新运行pre-commit检测,验证是否生效。
5. 升级pre-commit到最新版本
旧版本的pre-commit可能存在exclude规则的bug,升级到最新版:
pip install --upgrade pre-commit
6. 测试exclude规则是否生效
用以下命令测试指定文件是否被正确排除:
pre-commit run mypy --files support/ticket/migrations/0001_initial.py --verbose
如果输出显示Skipped <文件路径> due to exclude pattern,说明规则生效;若仍检测该文件,需调整正则表达式。
内容的提问来源于stack exchange,提问作者Alexey Razmanov
相关产品推荐
相关产品推荐

