用openssl替换git中的GnuTls

在获取android源码时,我们经常会因为个别git仓库特别大,在sync时总是失败.会一直报GnuTLS recv error (-9): A TLS packet with unexpected length was received ,每次都是700m快到800m的时候报这个错,google了很多天后,发现这是GnuTLS的一个bug.网上提供的方案是用openssl替换这个包.需要重新编译git.记一下以下替换命令

sudo apt-get update
sudo apt-get install build-essential fakeroot dpkg-dev libcurl4-openssl-dev
sudo apt-get build-dep git
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git
dpkg-source -x git_1.7.9.5-1.dsc
cd git-1.7.9.5

然后 , 编辑debian/control 文件并全部替换 libcurl4-gnutls-devlibcurl4-openssl-dev. 删除debian/rules文件中的TEST=test 接下来编译并安装

sudo dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../git_1.7.9.5-1_i386.deb //for arch i386
sudo dpkg -i ../git_1.7.9.5-1_amd64.deb // for arch x64

一切顺利的话安装成功.重新使用repo sync.你会发现不再有GnuTLS recv error (-9): A TLS packet with unexpected length was received 这样的错误了. 然后新的错误又出来了error: RPC failed; curl 18 transfer closed with outstanding read data remaining 这说明我们费尽心思替换掉GnuTLS并没有什么卵用. 巨坑..

再次在网上找解决方案尝试以下方案,设置git 的http.postBuffer,单位是b,下边这个才500M,估计要调到2G才足够大

git config --global http.postBuffer 524288000

值得一试

更新一下, 不用试了,没啥用的. 最后还是先用国内的镜像地址替换,等同步完了后,再将googlesource的地址换上去.

发表评论

电子邮件地址不会被公开。 必填项已用*标注