如何无需知晓变更编号从Gerrit仓库拉取最新代码
Gerrit 无编号拉取最新变更方案
之前命令失效的核心原因
refs/for/*是Gerrit专属的仅支持推送的虚拟引用空间,只用来接收提交到评审流程的代码,本身不存储可读的提交快照,所有pull/fetch操作访问这类路径都会直接失败。- 不指定具体引用直接执行
git pull <仓库SSH地址>报找不到远程ref HEAD,是因为Gerrit和普通Git服务逻辑不同:出于权限控制考虑,Gerrit不会全局暴露仓库默认HEAD指向,未明确指定拉取的引用路径时,不会自动匹配默认分支。
具体操作方法
按实际需求选对应方案即可,全程不需要手动查变更编号:
- 拉取目标分支最新已合入的正式代码
直接拉分支的真实引用即可,对应你往master推送评审的场景,执行:
所有评审通过、正式合入master的最新提交都会被拉到本地。git pull origin master - 拉取目标分支最新的待评审未合入变更
不需要打开Gerrit网页复制带编号的拉取地址,通过Gerrit自带的SSH查询接口就能自动获取最新开放变更的patchset引用,一次性完成拉取,替换命令里的端口、账号、Gerrit地址为你自己的环境参数即可:
如果需要频繁拉取最新待评审代码,可以把上述长命令配置为本地Git别名,后续直接敲短命令就能完成操作。# 查询master分支最新1条开放评审的最新补丁集,拉取到本地 git fetch origin $(ssh -p 29418 your_username@your-gerrit-domain gerrit query --current-patch-set status:open branch:master limit:1 | grep 'ref:' | awk '{print $2}') # 拉取完成后切换到该提交即可查看代码 git checkout FETCH_HEAD
补充:你之前从网页复制的
refs/changes/xx/xxxx/x格式路径是每个补丁集的固定存储地址,上面命令自动查询到的引用和这个路径完全一致,只是省去了手动查编号的步骤。
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

