一、Gerrit 是什么(一句话看懂)
Gerrit 是华为、谷歌等大厂内部专用的代码审核系统 ,和 GitCode/GitLab/GitHub 这种 MR 平台是同类,但规则更严格;
它有一套专属的评论指令、推送命令,业内统称「Gerrit 系统命令」。
1、两类 Gerrit 命令
① 网页评论指令(和你 MR 里 /compile 类似)
在变更页面评论框输入斜杠指令,触发后台 CI、校验、重跑流水线,Gerrit 原生常用:
/recheck:重新执行编译/CI校验(对应你现在 GitCode 的/compile)/rebase:自动变基更新代码/submit:审核通过后合入主干/verified +1:手动标记编译通过
GitCode 社区(CANN 仓库)借鉴了这套设计,所以你在 MR 里发 /compile 本质就是模仿 Gerrit 的 /recheck 机制,属于同类机器人指令。
② 本地 Git 推送专属命令(Gerrit 独有)
普通 Git 直接推 origin/master,Gerrit 不能直接推主线,必须推评审专用虚拟分支:
bash
# Gerrit 标准提交评审代码命令
git push origin HEAD:refs/for/master
refs/for/master 是 Gerrit 魔法路径:代码先进待审核队列,审核全部通过才能合入真实 master,杜绝未经审查代码直接进主干。
二、为什么华为 CANN 社区会提 Gerrit?
- 昇腾、华为内部研发全用 Gerrit 做代码评审;
- 开源 GitCode 仓库复用了内部 CI 机器人逻辑,所以沿用了
/xxx评论指令风格; - CLA 校验、流水线重跑逻辑,完全对齐内部 Gerrit 平台。
三、区分清楚:你现在的场景不用 Gerrit 本地命令
你现在用的是 GitCode(开源社区),不是内网 Gerrit,只需要记住这条评论指令 即可:
打开 MR !496,评论输入:
/compile
等价于 Gerrit 的 /recheck,会重新跑 CLA 校验、代码编译流水线,刷新 cann-cla/no 标签。
四、补充:Gerrit 和 GitCode MR 核心区别
- Gerrit:以单条Commit 为评审单元,一次只能改一个提交,用
git commit --amend更新补丁; - GitCode/GitLab MR:以完整分支为评审单元,多条提交都能放一个MR里,就是你现在的模式;
- 指令互通:两边都支持评论区
/开头的机器人触发命令,逻辑完全一样。
回到你当前 CLA 问题的最简操作(不用管复杂Gerrit推送)
- CLA页面填你自己能收验证码的真实邮箱,完成签署;
- MR页面评论发
/compile重跑校验;
不用去学 Gerrit 的refs/for/master推送命令,开源社区不强制这套。
MR 全称
1. GitCode / GitLab 体系:Merge Request
中文:合并请求
含义:你把自己分支的代码,申请合并到目标主干分支(比如 master),就是你现在这条 !496 页面。
2. 对应 GitHub 同类功能叫 PR
PR = Pull Request,作用和 MR 完全一样,只是平台命名不同:
- GitCode、GitLab、Gitee → MR(Merge Request)
- GitHub → PR(Pull Request)
补充你场景里的关联
你页面链接里 merge_requests/496,路径里的 merge_requests 就是 MR 的完整单词。
CANN 仓库里 !496 就是第496号 Merge Request。