CODEOWNERS 是什么
CODEOWNERS 把仓库路径与负责团队(或个人)绑定:某路径下的文件被改动时,相应负责人自动被请求评审;配合分支保护里的「Require review from Code Owners」,未获指定负责人批准就无法合并。规则写在仓库内的 CODEOWNERS 文件里(GitHub 支持根目录、.github/、docs/ 三个位置;GitLab 支持根目录、docs/、.gitlab/),随代码评审与版本化。匹配规则自上而下逐行生效,后出现的规则覆盖先出现的,常用的兜底是 * @org/core-team。负责人必须对仓库有写权限,否则评审请求不会生成。
基本信息
| GitHub 位置 | 根目录、.github/ 或 docs/ 下的 CODEOWNERS |
|---|---|
| GitLab 位置 | 根目录、docs/ 或 .gitlab/ 下的 CODEOWNERS |
| 匹配规则 | 自上而下逐行匹配,后者覆盖前者 |
| 生效条件 | 配合分支保护或审批规则才强制 |
| 权限 | 负责人需有仓库写权限 |
典型使用场景
- 平台团队管基础设施:infra、部署脚本的改动强制 SRE 评审。
- 安全团队盯敏感路径:认证、支付、权限相关目录单独归属。
- 文档与多语言:文档目录指定对应负责人,翻译改动有人把关。
- monorepo 分治:各业务目录归属对应团队,评审不串门。
- 关键路径必审:把核心模块设为必审,防止绕过专业评审。
- 归属治理:定期更新规则,移除已解散团队与离职成员。
CODEOWNERS 示例
CODEOWNERS 示例
* @org/core-team # 兜底:未匹配文件的归属
/infra/ @org/sre # 基础设施目录
/docs/ @org/docs-team
# 后出现的规则覆盖先出现的,例外放后面模式写法
| 模式 | 匹配范围 | 注意 |
|---|---|---|
| * | 全部文件 | 兜底用,需活跃团队 |
| /infra/ | infra 目录下所有文件 | 目录级归属 |
| *.md | 所有 Markdown | 后缀通配 |
| @org/team | 团队 | 成员需有写权限 |
规则优先级与行序有关:通用规则放前面,例外与精细化规则放后面,写反会出现「该管的人没被叫到」。
CODEOWNERS 本身只产生评审请求:强制效果来自分支保护的必审开关,两处要一起配。
用团队账号而不是个人:成员休假或离职时,请求仍然落到团队队列里,不会无人处理。