无法通过HTTPS在Linux上克隆GitHub存储库

94

我正在尝试在CentOS服务器上执行简单的git clone https://github.com/org/project.git,但是遇到了以下错误:

错误:访问https://github.com/org/project.git/info/refs时返回错误401

致命错误:HTTP请求失败

它从未提示我输入用户名/密码,只是失败了。

我可以在我的Mac上轻松地进行完全相同的调用-我错过了什么吗?


这是一个全新的、开放的CentOS 6.3云盒子,互联网访问不是问题。 - Yarin
@Yarin:我相信你已经阅读了这篇文章:https://help.github.com/articles/https-cloning-errors。我认为最后的救命稻草就是使用SSH。另外,你可能需要检查一下你的Git配置的电子邮件地址……不确定它是否有帮助,但请确保它与你在GitHub账户中使用的电子邮件地址相对应。 - greg0ire
是的,这些都不符合要求——我从我的Mac终端复制了一个工作命令到Linux终端中,没有密码提示,结果失败了。 - Yarin
9个回答

219
答案很简单,但不是显而易见的: 不要:
git clone https://github.com/org/project.git

做:

git clone https://username@github.com/org/project.git

或(不安全)

git clone https://username:password@github.com/org/project.git

注意,在后一种情况下,您的密码可能会被其他用户通过运行ps u -u $you在您的计算机上看到,并且默认情况下将以明文形式出现在您的shell历史记录中。
这三种方法都在我的Mac上工作,但只有后两种方法在远程Linux系统上工作。 (回想起来,这可能是因为我在我的Mac上设置了global git username,而在远程系统上没有?这可能是原因,但缺乏提示输入用户名让我困惑了……)
我在任何地方都没有看到过这个文档,所以在这里分享一下。

4
感谢你提到了 git config --global user.name 的细节,这就是我的问题所在! - GermanK
请注意,从git 1.7.10开始,根据@JERC的说法,您将被提示输入用户名,因此这不再是一个问题。 - Yarin
我也遇到了同样的问题(使用GIT 1.7.1,CentOS5),但我无法将用户名/密码添加到URL中,因为我必须从私有Bitbucket存储库安装捆绑包(显然我不会将用户名和密码信息添加到composer.json/composer.lock中)。由于GIT不允许我手动输入它们,所以我不得不走弯路,并通过RPM Forge Repository(http://guru4hp.blogspot.hu/2012/08/how-to-configure-rpmforge-repository-on.html)更新了GIT。我按照@muness在这里找到的指南进行操作:http://serverfault.com/questions/448814/yum-doesnt-install-latest-version-of-git-on-centos6 - hattila
2
如果您在Linux上使用git 1.7.1,则这就是答案。 - Louie Miranda
1
仅适用于1.7.10之前的版本。 - Amit G
我想我没有意识到“org”应该被我的组织名称所替换。我真的是一个新手。一旦我这样做了,并当然输入了我的实际“用户名”,我就会提示输入密码,现在我正在运行。顺便说一句,我刚刚在CentOS上安装了git,他们给了我1.7.1版本。 - Buttle Butkus

34

你可以手动禁用SSL验证,然后再尝试一次。 :)

git config --global http.sslverify false

3
针对BeagleBone Black在Angstrom系统中,opkg并没有提供所需版本以进行SSL验证,因此这是我发现的唯一有效的选择。 - Josiah
1
@flickerfly的陈述是有效的。在使用Angstrom OS的Beaglebone Black上,除了使用这种方法,没有其他使用https进行克隆的方式。 - Funky81
1
适用于Centos。谢谢。 - 030
1
禁用 SSL 验证有一定的危险性。理论上,恶意的中间人可能会向您发送修改过的 Git 仓库。 - Mark Doliner
在使用GitLab时,也必须这样做。 - Gerard

13

我遇到了同样的问题,错误信息和操作系统信息如下:

操作系统信息:

CentOS release 6.5 (Final)

Linux 192-168-30-213 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

错误信息:

/home/techops/pyenv/.git/ 中初始化 Git 存储库失败

密码:

error: 访问 https://waterdrops@github.com/pyenv/pyenv.git/info/refs 出错

fatal: HTTP 请求失败

Git 和 Curl 版本信息:

Git 信息:Git 版本 1.7.1

Curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 协议:tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 功能:GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

调试信息:

$ curl --verbose https://github.com

  • 尝试连接到 github.com 的端口 443 (#0)
  • 正在尝试连接 13.229.188.59... 连接成功
  • 已连接到 github.com (13.229.188.59) 的端口 443 (#0)
  • 正在初始化 NSS,证书路径为:sql:/etc/pki/nssdb
  • CA 文件: /etc/pki/tls/certs/ca-bundle.crt CA 路径: none
  • NSS 错误 -12190
  • TLS 握手错误,正在尝试 SSLv3... GET / HTTP/1.1

  • 用户代理:curl/7.19.7(x86_64-redhat-linux-gnu)libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 主机:github.com 接受:/

  • 连接中断,正在尝试重新连接

  • 关闭连接 #0
  • 向此URL发出另一个请求:'https://github.com'
  • 即将连接()到github.com的端口443 (#0)
  • 尝试13.229.188.59... 已连接
  • 已连接到github.com (13.229.188.59) 的端口443 (#0)
  • TLS由于上一次握手失败而被禁用
  • CA文件:/etc/pki/tls/certs/ca-bundle.crt CA路径:无
  • NSS错误-12286
  • 关闭连接 #0
  • SSL连接错误 curl:(35)SSL连接错误

升级 curl、libcurl 和 nss 后,git clone 再次正常工作。下面是更新命令:

sudo yum update -y nss curl libcurl


谢谢 - 这对我来说是最好的解决方案,用于客户旧的CentOS 6.6服务器上运行的git 1.7.1的repo的bitbucket。 - Eric Kigathi
我在使用gitlab-ci runner时遇到了问题,但升级后就正常工作了。 - isca
非常感谢兄弟...更新curl对我很有帮助... - Nitin Garg
这一直是主要问题。非常感谢! - Dave

12

确保您拥有 Git 版本 1.7.10 或更高版本,现在它可以正确提示输入用户名和密码。(您可以在此处下载最新版本)


4
我也有同样的问题。当我的git版本从1.7.1升级到1.7.10时,现在它能正确提示输入用户名和密码了!(版本1.7.1与1.7.10不同)。在投入使用前,请检查版本号。 - JERC

10

我必须指定用户名才能在1.7.1版本的Git上工作:

git remote set-url origin https://username@github.com/org/project.git

6

经过一段时间的努力,我终于成功使用了git 1.7.1。

首先,我不得不禁用SSL,这样才能进行pull操作:

git config --global http.sslverify false

然后我就可以克隆。
git clone https://github.com/USERNAME/PROJECTNAME.git

在添加和提交后,我无法向后推送。 所以我这样做。
git remote -v

origin  https://github.com/USERNAME/PROJECTNAME.git (fetch)
origin  https://github.com/USERNAME/PROJECTNAME.git (push)

查看拉取和推送地址:

必须使用USERNAME@修改这些地址。

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

它仍会提示您输入密码,您可以通过以下方式添加密码:
USERNAME:PASSWORD@github.....

但是不要这样做,因为这会以明文形式保存你的密码,容易被盗取。

由于防火墙限制,我不得不采用这种组合方式,因为无法使用SSH。


6
作为JERC所说,确保您拥有更新的git版本。如果您只使用默认设置,则在尝试安装git时将获得1.7.1版本。除了手动下载和安装最新版本的get之外,您还可以通过向yum添加新存储库来完成此操作。
tecadmin.net下载并安装rpmforge存储库:
# use this for 64-bit
rpm -i 'http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm'
# use this for 32-bit
rpm -i 'http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm'

# then run this in either case
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

然后您需要启用rpmforge-extras。编辑/etc/yum.repos.d/rpmforge.repo并在[rpmforge-extras]下将enabled = 0更改为enabled = 1。该文件如下所示:

### Name: RPMforge RPM Repository for RHEL 6 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://mirrorlist.repoforge.org/el6/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/extras
mirrorlist = http://mirrorlist.repoforge.org/el6/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0 ####### CHANGE THIS LINE TO "enabled = 1" #############
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/testing
mirrorlist = http://mirrorlist.repoforge.org/el6/mirrors-rpmforge-testing
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-testing
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

一旦完成此步骤,您就可以使用以下命令更新git:
yum update git

我不确定为什么,但他们建议禁用rpmforge-extras(更改回enabled = 0),然后运行yum clean all
很可能您需要使用sudo来执行这些命令。

非常棒的答案!解决了我在Redhat(RHEL)6.3上的问题。 - Max
不必手动编辑两次repo文件(先启用extras,然后再禁用它),我只需运行yum install --enablerepo=rpmforge-extras git就可以了! - alleen1

5
这可能是对这个问题最愚蠢的回答,但是可以查看GitHub的状态。这个方法让我想起来了 :)

今天的消息是:“我们仍在努力缓解一次非常大的DDoS攻击。现在该网站对某些用户可用,但我们将保持红色状态,直到我们确信该网站能够正常运行。”谁会黑掉GitHub?真的吗? - BenDundee
显然不是Homakov,他提交到主分支而不是进行DDoS攻击。 - nurettin

4

我遇到了同样的问题和错误。在我的情况下,是https_proxy没有设置。 设置https_proxy环境变量解决了问题。

$ export https_proxy=https://<porxy_addres>:<proxy_port>

例子:

$ export https_proxy=https://my.proxy.company.com:8000

希望这能帮助到有需要的人。

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