dream/ 10月 21, 2018/ git, linux/ 3评论

今天升级Ubuntu18.04后,发现git无法push和clone。提示TLS连接问题,google后发现是由系统的 git 默认使用的 libcurl4-gnutls-dev 造成,可以使用openssl解决。

问题示例:

╰─$ git push origin master
fatal: unable to access 'https://github.com/Dts0/code.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
fatal: unable to access 'https://github.com/Dts0/code.git/': gnutls_handshake() failed: Error in the pull function. fatal: unable to access

问题原因:

git使用了libcurl4-gnutls-dev,而在ubuntu18中该库作出了修改,导致git无法使用SSL进行连接。

解决方案:

重新编译并安装使用libcurl4openssldev的git。

具体脚本:

#安装需要的工具包
sudo apt-get update
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep git
sudo apt-get install libcurl4-openssl-dev	#应当在安装git构建依赖之后否则会报错无法查找到libcurl4-openssl-dev
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git	#git源码
cd git-2.17.1/	#根据你的git源码版本切换

sed -i 's/libcurl4-gnutls-dev/libcurl4-openssl-dev/g' debian/control	#将debian/control文件中libcurl4-gnutls-dev全部替换为libcurl4-openssl-dev
sed -i 's/TEST =test//g' debian/rules	#删除debian/rules文件中TEST =test

sudo dpkg-buildpackage -rfakeroot -b	#生成安装包
cd ..
sudo dpkg -i git_2.17.1-1ubuntu0.3_amd64.deb 	#安装对应版本的git

注:可能需要修改脚本中git版本相关的信息,当前为2.17.1
安装时注意选择对应的版本(eg. x64为amd64的安装包)

可能遇到的问题:

1.构建安装包失败。原因:git源码改变导致sed修改的语句需要改变。解决方案:手动进行修改。编辑debian/control 文件并全部替换 libcurl4-gnutls-dev 为 libcurl4-openssl-dev 删除debian/rules文件中的TEST=test 重新编译并安装。

2.使用到代理时,安装后git clone或push仍然出错。

╰─$ git clone https://github.com/Dts0/dts_zsh.git
正克隆到 'dts_zsh'...
fatal: unable to access 'https://github.com/Dts0/dts_zsh.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 127.0.0.1:8123

原因:git的代理没有配置。

解决方案:配置git代理。请把proxy.server.com:8080换成对应的代理端口。

git config --global http.proxy http://proxy.server.com:8080
git config --global https.proxy https://proxy.server.com:8080

 

附件:

已经编译了的安装包:git_openssl_2.17.1

参考链接:https://blog.csdn.net/laviolette/article/details/80306178

 

点击数:3700

Share this Post

3
说点什么

avatar
300
2 评论主题
1 主题回复
0 关注
 
最热门评论
最热门主题
3 评论者
Ryandtsnevaeh 最近的评论者
  订阅  
最新 最旧 得票最多
提醒
nevaeh
游客
nevaeh

您好,在生成安装包的下一步,报错说找不到文件,怎么办

Ryan
游客
Ryan

我使用docker解决git问题