Git:HTTP请求失败

23

我有一个带有HTTPS访问的远程仓库。

git status仅列出一个条目:master。

git remote -v 列出了两个指向相同地址的条目:一个用于fetch,一个用于push。

但是当我执行git remote show origin或其他操作(如fetch),我会得到:

error: while accessing https:...
fatal: HTTP request failed
我在代理后面,但由于我的 .gitconfig 中设置了 sslVerify = no 并且克隆也成功了,我不认为问题来自这里。但是......我的操作系统(CentOS)已经重新安装了。

1
你能分享一下 git remote -v 命令打印出来的 origin 的 url 前六个字符吗?特别是协议类型,http、https、ssh 或 git? - First Zero
3个回答

35

如果你使用的是https:而不是git:来克隆,那么可能会出现证书验证错误的情况,也就是说你没有一个中间证书的副本用于验证SSL连接。我在几个不同的情况下都遇到过这种情况,通常是在基于debian的Linux发行版上。尝试:

git config --global http.sslVerify false

然后再克隆一次。如果克隆成功,这就是正在发生的事情。然而,这是一个不好的解决方案,因为它关闭了SSL验证,这使得使用HTTPS有点无意义,并且让您容易受到中间人攻击的威胁。

您需要做的是根据您所使用的操作系统下载CA证书包,在Linux下(比如Debian/Ubuntu),它可能是这样的

apt-get install ca-certificates

然后

git config --global http.sslVerify true
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
尽管根据操作系统版本不同,你的证书文件路径可能会有所不同。这样应该可以让它正常工作。

在Beaglebone上需要做的另一件事是启用ntp。Angstrom Linux没有安装ntp,而Beaglebone没有备用电池时钟。这意味着日期在启动时设置为2000年1月1日。这会导致各种问题,包括使SSL证书无效。 - Alasdair Allan
我有一个类似的问题:https://superuser.com/questions/1323649/git-ls-remote-throws-fatal-http-request-failed 但是关闭SSL验证并没有起作用。 - Alfredo M

3

我曾经在Windows系统的Git Bash中设置了http_proxy环境变量作为HTTP代理,但只有在%HOME%/.gitconfig文件中设置代理才生效:

[http]
    proxy = http://USERNAME:PASWORD@URL:PORT

2
环境变量是大小写敏感的,应正确写成小写的 http_proxy。(当然有些软件可以处理大小写,但有些则不能!) - Edward Thomson

0

我遇到了相同的错误,但问题与其他答案中提到的有所不同。我在 Linux 上尝试克隆存储库:

git clone http://xxx/scm/xxx/xxx.git
Initialized empty Git repository in /opt/git/xxx/.git/
Password:
error: Failed connect to xxx:80; Operation now in progress while accessing http://xxx.git/info/refs

fatal: HTTP request failed

这是关于编程的内容。返回翻译文本:
这全是因为文件夹的权限错误 - 但是 Git 却抛出了 HTTP 请求失败的错误,而不是某些权限错误。所以,如果有人遇到类似问题,请检查文件夹的权限!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接