CODEOWNERS 优先级是什么
CODEOWNERS 决定哪些改动自动请求哪些人评审。匹配规则的关键是「后定义优先」:同一路径被多条模式命中时,取文件中最后出现的那一条。因此常见写法是首行用 * 兜底全仓,再按目录逐层写更具体的规则去覆盖它;团队与个人所有者可以混合指定,一条规则也可挂多个所有者。
基本信息
| 优先级 | 同一路径多条匹配时取最后一条 |
|---|---|
| 兜底 | 首行常用 * @团队 覆盖全仓 |
| 覆盖 | 更具体的模式放在后面即可覆盖兜底 |
| 生效位置 | .github/CODEOWNERS、根目录、docs/ 三选一 |
| 触发 | 改动涉及的文件自动请求对应所有者评审 |
典型使用场景
- 全仓兜底加目录细分:* 兜底,关键目录另指团队。
- 跨团队仓库:按目录把评审路由到对应团队。
- 高风险文件守护:CI 配置、发布脚本指定专人把关。
- 评审减负:把嘈杂目录交给专门团队,主线团队专注核心代码。
- 合规要求:特定路径强制业务负责人评审后才能合并。
- 新人友好:让改动自动找到最熟悉该模块的评审人。
覆盖顺序示例
覆盖顺序示例
* @org/maintainers # 兜底:全仓默认请求
/services/pay/ @org/pay-team # 覆盖兜底:支付目录
/services/pay/legacy/ @org/legacy-team # 更具体者写在最后验证匹配
验证匹配
# 本地无法直接求值,创建测试 PR 观察自动请求的评审人
gh pr view --json reviewRequests常见模式
| 模式 | 含义 | 备注 |
|---|---|---|
| * | 全仓兜底 | 一般放第一行 |
| /services/ | 根下目录含子目录 | 前导斜杠锚定根 |
| *.js | 任意位置匹配(不加斜杠) | 扩展名类规则 |
| docs/* | 仅单层目录 | 不递归子目录 |
删改 CODEOWNERS 本身也属于评审范围,建议要求平台团队批准该文件;调整顺序后务必重新验证匹配结果;Fork 场景以目标仓库的配置为准。