如何解决问题在最后
一、核心定位
Gerrit 是一款开源的代码审查与项目管理工具,深度集成 Git 版本控制系统,专为团队协作设计。最初由 Google 开发(源于 Android 项目),现广泛应用于开源项目(如 Linux 内核)和企业级开发,核心目标是在代码合并前通过审查提升质量,同时支持灵活的工作流程。
二、核心功能与特性
-
代码审查流程
- Change 与 Patch Set:每个提交(Change)包含唯一的
Change-Id
(由克隆时自动添加的commit-msg
钩子生成),支持多次迭代(Patch Set),最终仅合并最新版本。 - Web 界面交互:通过网页实时查看代码差异、添加行内注释,支持审查者评分(如
+2
代表批准,-2
阻止合并),所有讨论历史可追溯。 - 自动化验证:集成 CI/CD 工具(如 Jenkins),自动运行测试并标记 “Verified” 状态,确保代码质量。
- Change 与 Patch Set:每个提交(Change)包含唯一的
-
Git 深度集成
- 特殊引用(Refs):通过
refs/for/<分支名>
推送代码至审查暂存区,区别于直接提交到主分支(refs/heads
),强制审查流程。 - 权限精细化:支持按项目、分支、用户角色配置权限(如提交、审查、合并),甚至允许部分用户绕过审查直接提交。
- 特殊引用(Refs):通过
-
协作与透明度
- 关联工作项:与飞书、Jira 等工具集成,将代码变更关联需求 / 缺陷,自动同步状态(如合并后更新任务节点)。
- 通知机制:通过邮件或 Webhook 实时通知关注者,支持 Watch 项目 / 分支,减少沟通成本。
三、典型工作流程
-
克隆代码(含钩子)
git clone ssh://user@gerrit-server:29418/project && scp -p -P 29418 user@gerrit-server:hooks/commit-msg .git/hooks/
注:
commit-msg
钩子自动生成Change-Id
,确保多版本提交关联。
2.提交审查
git commit -m "feat: 新功能" # 钩子自动添加 Change-Id
git push origin HEAD:refs/for/master # 推送到审查分支
-
审查与迭代
- 审查者通过 Web 界面评论、打分,提交者根据反馈修改后
--amend
并重新推送,自动覆盖旧 Patch Set。 - 需至少一个
+2
评分且无−2
,同时通过自动化测试(Verified +1),方可合并。
- 审查者通过 Web 界面评论、打分,提交者根据反馈修改后
-
合并与同步
审查通过后,Gerrit 将代码合并至目标分支,自动清理暂存区,本地通过git pull --rebase
同步最新代码。
四、为什么选择 Gerrit?
- 质量保障:强制审查机制减少低质量代码提交,历史讨论可追溯,便于知识沉淀。
- 灵活适配:支持私有化部署(如内网环境),兼容 HTTPS 与 SSH,适配不同团队规模。
- 效率提升:与 Git 无缝衔接,快捷键(如
Ctrl+Enter
提交评论)和 REST API 优化开发体验,支持分端(前后端)流转规则。 - 生态集成:与飞书、Jenkins 等工具深度联动,实现 “代码提交→审查→测试→部署” 全流程自动化。
五、技术与生态
- 底层架构:基于 Java 和 Git,早期版本用 Python,现支持 MySQL/PostgreSQL 存储元数据。
- 钩子扩展:通过
commit-msg
、pre-receive
等钩子自定义逻辑(如规范提交信息)。 - 适用场景:适合需要严格代码审查的团队(如大型开源项目、金融 / 医疗等高风险领域),或希望标准化协作流程的企业。
总结
Gerrit 不仅是代码审查工具,更是团队协作的规范引擎。通过强制审查、透明讨论和自动化集成,它帮助团队在快速迭代中保持代码质量,尤其适合对质量敏感、需追溯变更的项目。无论是克隆时的钩子配置,还是审查中的评分机制,其设计处处体现 “让审查成为开发习惯” 的理念。
问题:在使用Gerrit clone代码的时候,你会发现报错,错误信息大概是:Permission denied (publickey)。
原因: OpenSSH从8.8版本开始由于安全原因开始弃用了rsa加密的密钥。
因为OpenSSH认为rsa破解成本太小了,有风险就给禁用了。
你可以通过命令:
ssh -v [git服务器]
去查看Gerrit服务器的OpenSSH的版本号,
如果≥8.8,就可以用这个方法。
解决办法
进入本机 .ssh目录,
在下面新建一个config文件,不带后缀名:
文件里我的内容:
文字版本
Host gerrit的IP或者域名
HostName gerrit的IP或者域名
User Gerrit的用户名(例如:zhangsan)
PubkeyAcceptedKeyTypes +ssh-rsa
IdentityFile ~/.ssh/id_rsa
Port 29418(Gerrit端口)
配置好后重新打开终端拉取代码即可成功