Gerrit 是什么 Gerrit 和 GitCode MR(Merge Request) 核心区别

一、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?

  1. 昇腾、华为内部研发全用 Gerrit 做代码评审;
  2. 开源 GitCode 仓库复用了内部 CI 机器人逻辑,所以沿用了 /xxx 评论指令风格;
  3. CLA 校验、流水线重跑逻辑,完全对齐内部 Gerrit 平台。

三、区分清楚:你现在的场景不用 Gerrit 本地命令

你现在用的是 GitCode(开源社区),不是内网 Gerrit,只需要记住这条评论指令 即可:

打开 MR !496,评论输入:

复制代码
/compile

等价于 Gerrit 的 /recheck,会重新跑 CLA 校验、代码编译流水线,刷新 cann-cla/no 标签。

四、补充:Gerrit 和 GitCode MR 核心区别

  1. Gerrit:以单条Commit 为评审单元,一次只能改一个提交,用 git commit --amend 更新补丁;
  2. GitCode/GitLab MR:以完整分支为评审单元,多条提交都能放一个MR里,就是你现在的模式;
  3. 指令互通:两边都支持评论区 / 开头的机器人触发命令,逻辑完全一样。

回到你当前 CLA 问题的最简操作(不用管复杂Gerrit推送)

  1. CLA页面填你自己能收验证码的真实邮箱,完成签署;
  2. 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。