codeowners 文件需置于仓库根目录或 .gitlab/ 目录下,命名为 codeowners(无扩展名),按行匹配路径模式,优先级自上而下,首行匹配即生效;路径支持通配符,用户格式为 @username 或 @groupname,且必须已加入项目;要使规则生效,目标分支须受保护并启用“require approval from code owners”开关。

Git分支权限本身不支持细粒度控制,所有细粒度能力必须依赖 Git 平台(如 GitLab)的扩展机制实现;Code Review 自动化也必须绕过人工指派环节,直接绑定变更路径与审批规则。
GitLab 的 CODEOWNERS 文件怎么写才生效
CODEOWNERS 不是 Git 原生命令,而是 GitLab(及 GitHub)解析的纯文本配置文件,必须放在仓库根目录或 .gitlab/ 下,且名称严格为 CODEOWNERS(无扩展名)。它按行匹配路径模式,优先级从上到下,首行匹配即停止。
- 路径支持通配符:
src/**/*.py匹配所有 Python 文件,docs/*仅匹配 docs 目录下一级文件 - 用户名必须已加入项目,格式为
@username或@groupname;群组需有访问权限 - 每行只能指定一个路径段,不能用逗号分隔多个用户;多用户需拆成多行或使用群组
- 若某次 MR 修改了
CODEOWNERS文件本身,该次变更**不会触发新规则**,旧规则仍生效
Protected Branches + Code Owner Approval Rules 怎么联动
仅设置 Protected Branches(如 main)为 “Allowed to merge: Maintainers” 是基础防线;要让 Code Owner 规则真正卡住合并,必须额外开启 “Require approval from code owners” 开关,并启用对应 Approval Rule。
- 入口路径:
Settings → Merge Requests → Approvals → Code Owner Approval Rules - 必须勾选 “Require approval from code owners”,否则即使
CODEOWNERS存在也形同虚设 - Approval Rule 中的 “Approvals required” 数值必须 ≥1,且不能和普通 “Approvers” 规则冲突(例如设为 2 人批准,其中 1 人必须是 code owner)
- 当 MR 修改了多个路径,且涉及不同 code owner 时,GitLab 会自动聚合所有匹配用户,任一未批准即阻断合并
GitLab CI 自动触发 GPT 审查时,如何避免重复评论或漏审
CI Job 的 review 任务默认在 merge_request event 下运行,但 GitLab 对同一 MR 的多次推送会复用同一个 pipeline ID,导致 GPT 脚本反复提交相同评论。关键在于利用 CI_MERGE_REQUEST_DIFF_ID 和 GitLab API 的 comments 接口做幂等判断。
- 脚本启动前先调用
GET /projects/:id/merge_requests/:mr_iid/notes?sort=desc,过滤出带[GPT]前缀的评论 - 比对最新一条评论的
diff_id字段是否等于当前CI_MERGE_REQUEST_DIFF_ID,相等则跳过 - 不要用
git diff直接传全文给 LLM——大模型 token 限制易截断,应提取变更文件列表 + 每个文件的 hunk 范围,再拼装结构化 prompt - MR 关闭或合并后,CI 仍可能触发(如 rebase 后 force push),需在脚本开头加
if [ "$CI_MERGE_REQUEST_STATE" != "opened" ]; then exit 0; fi
为什么 CODEOWNERS + AI 审查不能替代人工 Review
CODEOWNERS 解决的是“谁该看”,AI 审查解决的是“看什么问题”,但两者都绕不开一个事实:代码意图、业务上下文、架构权衡、边界 case 处理,这些无法从 diff 文本中可靠推断。
- AI 可能误报
if x == None:为 bug(实际是明确允许 None 的契约),而资深开发者一眼看出合理性 - CODEOWNERS 指定的前端工程师未必懂后端服务间协议变更的影响,此时 Security Approval Rule 才是兜底
- GitLab 的 approval 状态是“全有或全无”,无法表达“建议修改但非阻断”,这需要人工在 MR comment 中明确标注
真正的防线是三层嵌套:CODEOWNERS 确保领域专家到场 → AI 快速筛出低阶问题 → 人工聚焦高阶决策。漏掉任何一层,都会让流程变成形式主义。











