使用repo sync无法获取私有Android源码问题排查求助
问题根因
- 地址匹配规则失效:你配置的
insteadOf规则仅匹配ssh://git.xxx.org:9222前缀的地址,但manifest自动生成的子项目remote地址出现了端口重复,格式为ssh://git.xxx.org:9222:9222/private_Project/xxx,不符合替换规则,导致全局同步时地址未被正确替换为代理地址,拉取失败。 - 本地manifest修改被覆盖:手动修改
.repo/manifests/ABC.xml后,如果重新执行repo init时没有指定锁定本地修改,repo会自动从远端拉取原始manifest覆盖你的改动,导致自定义的remote地址不生效。 - 子项目remote配置缓存未更新:repo初始化时已经为所有子项目生成了带错误地址的remote配置,仅修改全局gitconfig不会自动同步更新存量子项目的remote配置,全局同步时依然会使用旧的错误地址。
全局同步修复方案
- 补全git地址替换规则,覆盖所有可能的错误地址格式:
git config --global url."https://private.xxx.yyy.cn".insteadOf "ssh://git.xxx.org:9222" git config --global url."https://private.xxx.yyy.cn".insteadOf "ssh://git.xxx.org:9222:9222"
- 批量更新所有子项目的remote地址,无需逐个修改:
repo forall -c 'git remote set-url caf $(echo $(git config --get remote.caf.url) | sed -E "s#ssh://git.xxx.org:9222(:9222)?#https://private.xxx.yyy.cn#")'
- 执行全局同步时添加参数跳过clone.bundle校验,避免无关警告:
repo sync -c --no-tags -j4 --no-clone-bundle
你之前单个项目同步可以成功,是因为单项目同步时repo会单独读取对应项目的最新配置,而全局同步默认复用初始化阶段生成的批量地址缓存,修复替换规则+批量更新remote后即可正常执行全局同步。
内容的提问来源于stack exchange,提问作者Aibo.H
相关产品推荐
相关产品推荐

