重新编译Git使用openssl替换GnuTLS
2020-04-06 21:08:44 +08 字数:715 标签: Git Linux在GitHub上,下载较大Git库时,会经常在等待许久之后,出现:
error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated
一般的解决思路,是加一个参数,让这个仓库小一些。 但这样也只是治标不治本,对更大的仓还是无力。
git clone --depth=1 ...
通过以openssl
方式,而非GnuTLS
方式,可以绕过此问题。
这需要重新编译git
。
下载git源码 ¶
在GitHub上,git/git本身就是一个大型Git仓库。
如果直接就能clone
下来,那这个环境也就不需要重新编译git
了。
所以需要想一些别的办法,把git/git弄到手。
下载源码包 ¶
wget https://github.com/git/git/archive/v2.26.0.zip
unzip v2.26.0.zip
由于GitHub的这类源码包,也是托管在国外,所以也有下载不了的可能。 以前是托管在AWS上,现在卖身微软,换成了codeload.github.com,估计是Azure的服务吧。 在网速过慢的情况下,超时后可能被服务端拒绝传输,并且无法断点续传。 总之,仍然是需要过墙手段。
下载Git库 ¶
虽然无法直接对git/git下手,但是可以通过Gitee,同步一个镜像,再从Gitee下载。 比如,孤做了个镜像yanqd0/git。
git clone https://gitee.com/yanqd0/git.git
这个速度还可以。
编译准备 ¶
除了编译器之外,Git还依赖于一些库。 直接编译,会出现各种错误。 比如:
$ make
GIT_VERSION = 2.18.0
* new build flags
CC credential-store.o
In file included from cache.h:4:0,
from credential-store.c:1:
git-compat-util.h:283:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
Makefile:2260: recipe for target 'credential-store.o' failed
make: *** [credential-store.o] Error 1
或者:
$ make
SUBDIR git-gui
MSGFMT po/pt_pt.msg Makefile:252: recipe for target 'po/pt_pt.msg' failed
make[1]: *** [po/pt_pt.msg] Error 127
Makefile:1955: recipe for target 'all' failed
make: *** [all] Error 2
需要在编译前,安装:
sudo apt install autoconf build-essential tcl-dev libssl-dev libcurl4-openssl-dev gettext
编译安装 ¶
make
make install
然后新的git就在~/bin/git
位置了。
一般不建议在系统的位置/usr
下,直接安装从源码编译的东西。
如果需要改到其它位置,比如~/.local/bin/
下,则需要从configure
开始。
make configure
./configure --prefix=$HOME/.local
make -j8
make install