Gerrit技术问询:批量下载补丁及多人协同使用同一Change-ID
Gerrit相关问题解答
1. 如何从Gerrit下载/应用所有补丁?
分两种常见场景处理:
场景1:下载单个变更的所有补丁集
每个Gerrit变更的补丁集对应独立的Git引用,格式为refs/changes/[两位数字]/[变更ID]/[补丁集编号]。要获取该变更的所有补丁集:
git fetch origin refs/changes/XX/CHANGE_ID/*:refs/changes/XX/CHANGE_ID/*
替换XX为变更ID的最后两位数字,CHANGE_ID为Gerrit变更的数字ID(比如变更URL是/c/project/+/12345,则CHANGE_ID是12345,XX是45)。
拉取完成后,可为每个补丁集创建本地分支保存:
# 保存补丁集1 git checkout -b change-12345-ps1 refs/changes/45/12345/1 # 保存补丁集2 git checkout -b change-12345-ps2 refs/changes/45/12345/2
场景2:批量下载分支上所有未合并变更
如果要拉取目标分支下所有未合并的Gerrit变更,可使用git review的批量同步命令:
git review -s branch_name
该命令会将分支下所有未合并变更拉取到本地,每个变更对应一个临时分支。
2. 多人共用同一Change-ID协作及补丁集同步问题
多人协作的核心逻辑
你们当前的操作流程是可行的:
git review -d change_id; git add -A; git commit --amend; git review branch_name; // 推送到同一变更的分支
但需注意:每次有人推送新补丁集后,其他人必须先同步最新补丁集,再基于此修改,避免后续合并冲突。
解决看不到他人补丁集的问题
git review -d change_id默认仅拉取当前用户推送的补丁集,要获取他人的补丁集,需手动拉取对应引用:
- 先在Gerrit网页上确认目标补丁集的编号(比如你要找的补丁集2)
- 拉取指定补丁集:
git fetch origin refs/changes/XX/CHANGE_ID/2:refs/changes/XX/CHANGE_ID/2
- 为该补丁集创建本地分支,即可同时保留自己的补丁集1、3和他人的补丁集2:
git checkout -b change-12345-ps2 refs/changes/XX/CHANGE_ID/2
如果想一次性拉取该变更的所有补丁集(含他人推送的),直接用场景1的批量fetch命令即可。
内容的提问来源于stack exchange,提问作者Garik
相关产品推荐
相关产品推荐

