You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pre-commit全局配置中排除app/test/目录?

问题根因

你遇到的全局exclude不生效,核心原因是你的mypy钩子设置了pass_filenames: false,同时entry写了mypy .——这种情况下,pre-commit不会把经过全局过滤后的文件列表传给mypy,而是让mypy自己扫描整个当前目录,所以pre-commit的全局exclude规则根本管不到mypy的扫描范围。

解决方案

要让全局exclude生效,同时满足你不想用mypy配置文件、启用strict、CI防--no-verify的需求,按以下步骤调整:

  1. 配置全局排除规则
    在pre-commit-config.yaml顶部添加全局排除规则,注意正则要覆盖目录下所有文件:
exclude: ^app/test/
  1. 修改mypy钩子配置
    删掉pass_filenames: false(默认值为true,可省略),同时移除entry里的.,让pre-commit把过滤后的文件列表传给mypy。在args中加入--strict及其他你需要的参数:
repos:
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.5.1 # 替换为你使用的mypy版本
    hooks:
      - id: mypy
        args: [--strict, --python-version=3.10] # 按需添加其他参数

这样pre-commit会先过滤掉app/test/下的所有文件,只把符合规则的文件传给mypy检查,间接实现了统一排除。

  1. CI环境强制检查
    在CI脚本中执行pre-commit run --all-files,而非仅检查提交的文件。这样即便有人用git commit --no-verify跳过钩子,CI也会强制扫描所有符合规则的文件,确保代码质量:
pre-commit run --all-files

补充提示

  • 如果项目需要指定mypy根目录、Python路径等额外配置,直接把对应参数加到args里即可,比如--explicit-package-bases、--python-path=src,无需编写mypy配置文件。
  • 正则匹配注意:^app/test/$仅匹配app/test目录本身,无法覆盖目录下的文件,改成^app/test/才能排除该目录下所有文件及子目录。

内容的提问来源于stack exchange,提问作者p1r4t3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:55:13