完美解决repo init 错误 fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle

4 篇文章 0 订阅
4 篇文章 0 订阅

个人邮箱:xiaokeweng@gmail.com  欢迎大家直接发邮件给我共同交流学习
【错误】
leo@leo-weng:~$repo init-uXXXX.xml
fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

【原因】

当repo init时,执行的repo是环境变量里面默认的repo,这个repo只是单纯一个几百行的python脚本
而不是完整的repo-project,所以要先去网络远端sync完整的repo-project,
因为repo也是开源项目,设计者出于维护和使用体验,每次repo init时候都要从远端sync最新的版本
(浏览器开https://gerrit.googlesource.com/git-repo/clone.bundle可以看到维护的history,当然了,前提是当时网络可以通过GFW)
在repo init成功情况sync的project会在./.repo/repo这个路径,包含repo所有功能逻辑的python脚本,
而正是因为远端的git server的域名gerrit.googlesource.com会被GFW挡掉。
就会出现Network is unreachable,运气不好的时候可能一整天都没办法init成功。
 

.repo/repo/
├── docs
├── hooks
├── main.py	
├── repo   #真正的repo命令都会绕到这里执行
├── subcmds
└── tests
    └── fixtures

【解决一】(推荐)

(该博客2016年更新)该问题可以通过增加如下option解决,该repo project有清华镜像源提供

--repo-url=https://gerrit-googlesource.proxy.ustclug.org/git-repo

 

即:leo@leo-weng:~$repo init-uXXXX.xml --repo-url=https://gerrit-googlesource.proxy.ustclug.org/git-repo

同时清华TUNA源还提供完整android源码(AOSP),参考link :https://mirrors.tuna.tsinghua.edu.cn

 

【解决二】通过分析repo 脚本,就会发现根据当前run的repo的路径中是否有main.py和当前目录的.git信息,来判断是否是完整的repo-project,如果不是就会触发git clone 去sync repo-project。那么避开git clone 的方法就是run repo-project中的repo 来init。如果你曾经有init成功过,就会在当年的目录下有一个.repo文件,例如{PATH},那么就引用那个{PATH}/.repo/repo/repo来init就不会去sync完整repo-project了如果是首次repo init,没关系,直接下载我后面的.repo完整文件就好。链接在本文最后,是15年比较心的版本。

721 def main(orig_args):
722   repo_main, rel_repo_dir = _FindRepo()                                                                         
723   cmd, opt, args = _ParseArguments(orig_args)
724
725   wrapper_path = os.path.abspath(__file__)
726   my_main, my_git = _RunSelf(wrapper_path)
727
728   if not repo_main:
729     if opt.help:
730       _Usage()
731     if cmd == 'help':
732       _Help(args)
733     if not cmd:
734       _NotInstalled()
735     if cmd == 'init':
736       if my_git:
737         _SetDefaultsTo(my_git)
738       try:
739         _Init(args)

684 def _RunSelf(wrapper_path):                    #当前repo脚本所在目录中的main.py和.git信息
685   my_dir = os.path.dirname(wrapper_path) 
686   my_main = os.path.join(my_dir, 'main.py')
687   my_git = os.path.join(my_dir, '.git')


【实例】
//跑PATH中default的repo,git clone时fail
leo@leo-weng:~$repo init-uXXXX.xml
fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

//下载repo-project并用${Download_path}/repo/repo 来替换上一条中的repo,绕开sync直接init成功

leo@leo-weng:~$~/Download/repo/repo init-uXXXX.xml
Get /home/leo/Download/repo/.git
remote: Counting objects: 3091, done.
remote: Compressing objects: 100% (1144/1144), done.
remote: Total 3091 (delta 1893), reused 3091 (delta 1893)
Receiving objects: 100% (3091/3091), 1.56 MiB, done.
Resolving deltas: 100% (1893/1893), done.
From /home/leo/Download/repo/
* [new branch]      default    -> origin/default
* [new tag]         v1.0       -> v1.0
* [new tag]         v1.0.1     -> v1.0.1
【下载repo project】

我直接在CSDN上面上传了,是15年6月左右最新更新的版本:

完整repo-project_repofatal:Cannotget-Android代码类资源-CSDN下载

 

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值