源码编译git 填坑 git 错误 fatal: Unable to find remote helper for http或https

问题产生:

git clone https://github.com/NVlabs/cub.git
fatal: Unable to find remote helper for 'http/https'
or
fatal: unable to access 'https://github.com/**.git/': Protocol "https" not supported or disabled in libcurl

问题原因:
git 依赖 curl, curl 依赖 openssl

解决办法

  • 尝试重装git无效
  • 尝试重装curl, 再重装git无效, 不过此时提示,似乎发现了什么原因…
    Protocol "https" not supported or disabled in libcurl
    -源码编译openssl curl git 最后完美解决

1. 最简单办法

改变git 克隆地址像下面这样操作

git clone [email protected]:NVlabs/cub.git

将前面的改成 即可,大部分用户修改后都能clone成功。
但是我这种情况,使用此方法无法解决问题(即使修改完所有仓库地址,还会有子仓库的情况,导致clone出错,所以请请接着下看~~)

2. 确认是否缺少git-remote-https

sudo find / -name git-remote-https
--> /usr/local/libexec/git-core/git-remote-https

如果出现上面情况,显示出git-remote-https所在路径,那么很简单,将/usr/local/libexec/git-core/* 拷贝到/usr/local/bin , 重开终端即可

sudo cp /usr/local/libexec/git-core/* /usr/local/bin/

当然,大部分用户是搜索不出来的…
因为系统压根没装相关依赖库…
那么请接着往下看

3. 编译openssl

点击 官方网站 下载如下版本, 也可直接点击此处下载对应版本

 	openssl-1.1.1g.tar.gz

源码编译git 填坑 git 错误 fatal: Unable to find remote helper for http或https_第1张图片

tar zxf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g
./config --prefix=/usr/local
make -j4
sudo make install

4. 编译curl

点击 官方网站 下载如下版本, 也可直接点击此处下载对应版本

 	curl-7.71.1.tar.gz
tar zxf curl-7.71.1.tar.gz
cd curl-7.71.1
# --with-ssl 参数设置为上一步中编译的open-ssl安装路径 
./configure --prefix=/usr/local --with-ssl=/usr/local
# 结果如下
-->
...
  curl version:     7.71.1
  SSL:              **enabled (OpenSSL)**
  SSH:              no      (--with-{libssh,libssh2})
  zlib:             enabled
  brotli:           no      (--with-brotli)
  GSS-API:          no      (--with-gssapi)

  SSH:              no      (--with-{libssh,libssh2})
  zlib:             enabled
  brotli:           no      (--with-brotli)
  GSS-API:          no      (--with-gssapi)

...
  HTTP2:            disabled (--with-nghttp2)
  HTTP3:            disabled (--with-ngtcp2, --with-quiche)
  ESNI:             no      (--enable-esni)
  Protocols:        DICT FILE FTP FTPS GOPHER **HTTP HTTPS** IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP

显示 SSL: enabled (OpenSSL) 和最后一行中显示HTTP HTTPS 即表示ok

然后接着继续编译

make -j4 
sudo make isntall

如果编译过程中出现如下错误

vtls/openssl.c:438:15: error: implicit declaration of function ‘RAND_egd’; did you mean ‘RAND_add’? [-Werror=implicit-function-declaration]
     int ret = RAND_egd(data->set.str[STRING_SSL_EGDSOCKET]?

是因为电脑里已经安装了openssl,将其卸载即可参考

# centos
sudo yum remove openssl-devel
# ubuntu
sudo apt-get remove libssl-dev

如果出现如下错误

checking run-time libs availability... failed
configure: error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lssl -lcrypto -lz

则说明本机安装的ssl路径有问题,将其添加到环境变量即可
查看/usr/local/openssl /usr/local/ssl /usr/local/lib64下是否有相应的libssl.so

已经发现centos下动态库可能会装到/usr/local/openssl/usr/local/lib64

例如我的机器装到了/usr/local下,那么可执行文件在/usr/local/bin/下, 动态库在/usr/local/lib64下,那么我将按照如下方式添加环境变量

echo "export PATH=\"\$PATH:/usr/local/bin\"" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=\"/usr/local/lib64\"" >> ~/.bashrc
source ~/.bashrc
ldconfig

5. 编译git

点击 github git 官网 下载如下版本, 也可直接点击此处下载对应版本

git-2.27.0.zip

解压编译

unzip zxf git-2.27.0.zip
cd git-2.27.0
yum install autoconf
make configure
./configure prefix=/usr/local
make -j4 
sudo make install

make -j4的时候如果出现找不到各种符号,那么就是链接libcurl.so的时候,链接到了系统的libcurl.so, 可以echo $PATH查看路径, 或者执行curl --version 打印出版本号不是我们刚刚编译的版本号,那么证明系统已经有了curl,那么我们只需要按照如下操作即可,改变环境变量里面路径的先后顺序即可

echo "export PATH=\"/usr/local/bin:\$PATH\"" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=\"/usr/local/lib:\$LD_LIBRARY_PATH\"" >> ~/.bashrc
source ~/.bashrc

6. 测试

重开命令行测试

(base) [swls@MiWiFi-R3-srv ~]$ git clone https://github.com/NVlabs/cub.git
Cloning into 'cub'...
remote: Enumerating objects: 33207, done.
^Cceiving objects:   9% (3154/33207), 1.61 MiB | 220.00 KiB/s 

完美解决!!!

你可能感兴趣的:(工具,git,linux)