使用git cl checkout从Gerrit检出分支失败:无法找到Dart项目已提交Issue对应的分支
git cl checkout 无法检出已提交Issue分支的问题 我之前在Dart项目的Gerrit协作中也碰到过一模一样的问题,新电脑上能创建Issue但就是没法用git cl checkout检出旧变更,大概率是本地仓库没同步Gerrit的变更分支信息,或者git cl的配置没到位。试试下面这些步骤:
步骤1:同步Gerrit的所有变更分支信息
首先执行fetch命令拉取Gerrit上的所有变更 refs,因为Gerrit的变更分支默认不在普通的refs/heads下,而是存在refs/changes路径里,本地仓库默认不会自动拉取这些:
git fetch origin '+refs/changes/*:refs/remotes/origin/changes/*'
这个命令会把Gerrit上所有变更的分支都同步到本地的origin/changes路径下。
步骤2:尝试重新用git cl checkout检出
完成fetch之后,再执行你原来的命令试试:
git cl checkout 212560
或者用完整的变更URL:
git cl checkout https://dart-review.googlesource.com/c/sdk/+/212560
步骤3:如果还是不行,手动检出变更分支
如果git cl还是没反应,可以直接通过Gerrit的refs路径手动检出。对于变更212560,它的refs路径格式是refs/changes/60/212560/[patchset编号](最后一位是补丁版本号,通常先试1):
git checkout origin/refs/changes/60/212560/1
如果需要创建本地分支关联这个变更,可以用:
git checkout -b issue-212560 origin/refs/changes/60/212560/1
步骤4:确认git cl的配置正确性
新电脑上可能需要重新配置git cl,确保它能正确识别Gerrit的远程仓库:
git cl config
检查输出里的review.url是不是https://dart-review.googlesource.com,remote是不是指向你的origin远程仓库。如果配置不对,手动设置:
git config review.dart-review.googlesource.com.url https://dart-review.googlesource.com git config review.dart-review.googlesource.com.remote origin
为什么会出现这个问题?
新克隆的仓库默认只会拉取refs/heads下的分支,而Gerrit的所有变更都存储在refs/changes路径下,所以git cl工具无法在本地找到对应的分支信息,必须手动同步这些refs才能让git cl识别到变更。
内容的提问来源于stack exchange,提问作者Ahmed Ashour

