Git错误:致命错误:无法连接套接字(无效参数)

51

我已经在家里的电脑上成功地安装了msysGit(Windows下的Git),但是在公司,我们在Microsoft ISA代理后面,当我尝试进行一次git clone时,会遇到以下错误:

H:\>git clone git://github.com/akitaonrails/vimfiles.git
Initialized empty Git repository in H:/vimfiles/.git/
github.com[0: 65.74.177.129]: errno=Invalid argument
fatal: unable to connect a socket (Invalid argument)

我尝试将http_proxy环境变量设置为:

http://our-proxy-server:8088

我已经设置了 git http.proxy 配置指令:

git config --global http.proxy http://our-proxy-server:8088

以上两种方式都没有影响。

使用http://而不是git://进行git克隆,会产生以下结果:

H:\>git clone http://github.com/akitaonrails/vimfiles.git
Initialized empty Git repository in H:/vimfiles/.git/
fatal: http://github.com/akitaonrails/vimfiles.git/info/refs download error - The    requested URL returned error: 407

407当然是一个身份验证错误。

所以我的问题是:有没有人成功地在代理后面(特别是ISA代理)使用git?我不知道是否值得追求这个。非常感谢任何帮助。

谢谢!


刚刚添加了另一个可能的修复方案。 - VonC
谢谢您的反馈。我理解您现在已经使用Git1.6.4了? - VonC
7个回答

62
我曾经遇到过完全相同的错误;但是~/.gitconfig全局配置文件是关键。
如果你使用有认证的代理,你需要在其中输入:
git config --global http.proxy http://login:password@our-proxy-server:8088

我只需输入 'git clone http:' 就可以使用它了

一个详细介绍相同设置的博客示例:GIT克隆HTTP:谁知道?


如果在407错误仍然失败,可能与git-fetch在第二次HTTP GET中丢失身份验证令牌相关。可能需要更高版本的libcurl


2011年1月更新:jbustamovej他的回答(已获赞)中提到了他的博客文章“GitHub Behind Corporate Proxy”,其中补充说明:

需要注意的是,如果您的登录名中有反斜杠,例如domain\login您必须转义反斜杠,例如:

git config --global http.proxy http://domain\\\login:password@our-proxy-server:8088

1
谢谢你的建议,但我还是无法解决这个问题。尽管我已经在环境变量和.gitconfig中设置了代理服务器(包括用户名和密码),但它仍然给出407(身份验证)错误。 - Charles Roper
我刚刚再次尝试了一下,因为msysGit已经更新了,而且它成功了。太好了!我猜测libcurl在最新版本中也得到了更新。 - Charles Roper
Charles,你用的是哪个版本?在新版本中,代理配置应该放在哪里?我遇到了同样的问题,尝试了很多方法。 - John John Pichler

19
即使配置了代理,由于代理禁止Git协议流量,您可能仍无法连接。在这种情况下,您可以尝试使用“http”而不是“git”。
此外,如果您正在使用自动代理配置文件(.pac),只需在文本编辑器中打开它。它是一种非常简单易懂的脚本语言,具有一系列条件来重定向到最有效的代理。找到允许通用流量的代理(通常是最后配置的代理),并按照上面的注释进行配置。

1
太好了!我之前在使用git时也遇到了类似的问题,它一直报错“无法连接到套接字(没有错误)”。后来我配置了我的--global http.proxy,并在克隆时使用http而不是git,问题得以解决。 - gath
这正是我的问题所在。我不必再去烦恼代理的事情了。 - Joseph Yaduvanshi
显然,这只适用于通过http托管的git存储库。也就是说,它将适用于基于github.com的存储库。对于其他存储库,您需要通过防火墙/代理使git正常工作。 - shiva

3
你有SOCKS代理吗?如果有,你可以尝试使用FreeCap来socksify你的git连接。我已经这样使用git一段时间了。
如果没有,仍然可以尝试FreeCap。据我所知,它可以使用http代理,但我没有尝试过。
编辑:我通常使用FreeCap来socksify cmd.exe ,从那时起(几乎)所有从该会话启动的命令行程序都被socksified了。这就是为什么我推荐Free Cap,因为SocksCap(另一种选择)不是这样工作的。
至于使用http.proxy,在mingw版本和我的公司http代理中,出于某种原因,它从未对我起作用过。

1
谢谢,FreeCap 看起来很有趣。您能详细说明一下如何使用 Git 吗? - Charles Roper

2
我通过一条非常复杂的路线使它工作起来了。以下是步骤:
  1. 我在我的家用电脑上(一个 Vista 系统)运行 OpenSSH,使用 Cygwin 运行
  2. 我使用 Bitvise Tunnelier 的动态隧道通过综合 SOCKS/HTTP 连接代理
  3. 然后我使用 Freecap(感谢 Marko)来“SOCKify” GIT-GUI。不幸的是,你必须单独设置每个 .exe 文件并从 Freecap 中运行它们,因此你不能普遍地 SOCKify 所有的 git 命令行工具。你可以在 Freecap 中设置显式的命令行命令,但你必须单独设置每个命令,这有点违背了初衷。这就是为什么我只在这个疯狂复杂的系统中设置了 GIT-GUI。
令人惊讶的是,它似乎有效,尽管我还没有测试所有功能。至少它可以克隆,这是一个好的开始。
如果有更好的解决方案,我很愿意听取。

1
这是对我有用的内容:

这里是我的解决方法:

git config --global http.proxy http://login:password@PROXY_SERVER:PORT
git config --global http.sslVerify false

需要解释一下。例如,这个想法/主旨是什么?来自帮助中心的解释是:“...始终解释为什么你提出的解决方案是合适的,以及它是如何工作的”。请通过编辑(更改)你的答案来回应,而不是在评论中回复(*** *** *** *** *** 不要 *** *** *** *** ***包含“编辑:”,“更新:”或类似的内容 - 答案应该看起来像是今天写的)。 - undefined

1

Python 2.7和ntlmaps在我从GitHub获取407错误和其他垃圾后为我工作。

.gitconfig:

[http]
      proxy = http://127.0.0.1:5865

0

我在Windows7上遇到了这个问题:

$ git clone git://github.com/facebook/php-sdk.git
Initialized empty Git repository in c:/Users/Jay/temp/php-sdk/.git/
github.com[0: 207.97.227.239]: errno=No error
fatal: unable to connect a socket (No error)

最终发现是AVG杀毒软件在运行。我在AVG中禁用了“Resident Shield”,现在可以完美地工作了。
$ git clone git://github.com/facebook/php-sdk.git
Initialized empty Git repository in c:/Users/Jay/temp2/php-sdk/.git/
remote: Counting objects: 223, done.
remote: Compressing objects: 100% (179/179), done.
emote: Total 223 (delta 84), reused 0 (delta 0)
Receiving objects: 100% (223/223), 37.32 KiB, done.
Resolving deltas: 100% (84/84), done.

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