方案|解决git gnutls_handshake失败

作者: 王诗翔 | 来源:发表于2018-12-16 00:01 被阅读10次

电脑不知道为什么不能git clone,报错:

$ git clone https://github.com/ShixiangWang/VSHunter
正克隆到 'VSHunter'...
fatal: unable to access 'https://github.com/ShixiangWang/VSHunter/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

查了下需要使用libcurl4-openssl-dev替换gnutls对git进行编译。

sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/git-openssl
cd ~/git-openssl
sudo apt-get source git
sudo apt-get build-dep git

如果出现找不到源代码的报错,使用命令sudo vim /etc/apt/sources.list打开文件并取消带deb_src那一行的注释,保存后运行sudo apt update,然后再执行上面最后一条命令

接着:

sudo apt-get install libcurl4-openssl-dev
sudo dpkg-source -x git_2.17.0-1.dsc
cd git_2.17.0 #实际版本可能不同

然后编辑文件debian/control,使用命令sudo vim deebian/control,将全部的libcurl4-gnutls-dev改为libcurl4-openssl-dev 。

接着运行命令:

sudo dpkg-buildpackage -rfakeroot -b
# (if it's failing on test, you can remove the line TEST=test from the file debian/rules)
sudo  dpkg -i  ../git_2.17.0-1_amd64.deb 

一般情况下到这就修复了这个问题了,但此时我还是不能进行克隆。

$ git clone https://github.com/ShixiangWang/VSHunter.git
正克隆到 'VSHunter'...
fatal: unable to access 'https://github.com/ShixiangWang/VSHunter.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 127.0.0.1:45077

通过搜索,我搞明白 git也要配置网络代理,而我使用了蓝灯,代理就出问题了。

进行以下配置:

git config --global http.proxy 'socks5://127.0.0.1:45077'
git config --global https.proxy 'socks5://127.0.0.1:45077'
git config --global http.proxy 'http://127.0.0.1:45077'
git config --global https.proxy 'http://127.0.0.1:45077'
注意端口号也设置代理的端口号,不同vpn,不同系统端口号可能不同。

现在我就能够正常克隆了:

$ git clone https://github.com/ShixiangWang/VSHunter.git
正克隆到 'VSHunter'...
remote: Enumerating objects: 95, done.
remote: Counting objects: 100% (95/95), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 591 (delta 54), reused 64 (delta 34), pack-reused 496
接收对象中: 100% (591/591), 149.13 MiB | 848.00 KiB/s, 完成.
处理 delta 中: 100% (361/361), 完成.

一些代理相关命令:

#查看代理
git config --global http.proxy

#删除代理
git config --global --unset http.proxy
git config --global --unset https.proxy

参考文章:

相关文章

网友评论

    本文标题:方案|解决git gnutls_handshake失败

    本文链接:https://www.haomeiwen.com/subject/xiizhqtx.html