我想通过代理服务器执行“git clone”。问题是我的代理服务器使用摘要式身份验证。所以我既没有在git文档中找到,也没有找到已经制作过的人。
我通过谷歌搜索挖掘,我找不到任何有用的结果。
Thxs。
答案 0 :(得分:25)
只是为了节省一些谷歌搜索Bennet的答案:
>git config --global --unset https.proxy
>git config --global --unset http.proxy
设置新设置:
>git config --global https.proxy https://USER:PWD@proxy.whatever:80
>git config --global http.proxy http://USER:PWD@proxy.whatever:80
验证新设置:
>git config --get https.proxy
>git config --get http.proxy
注意:验证时,您应该看到相同的值。
答案 1 :(得分:17)
通过将环境变量http_proxy
设置为http://username:password@proxyhost:80
然后一个普通的git clone
工作了。
(代理是一些企业Windows的东西,所以我的用户名实际上看起来像domain \ username。花了一段时间才意识到我需要域名。)
答案 2 :(得分:2)
请注意,自Git 1.7.10, Apr. 2012, commit dd61399以来,Git支持http代理。
但是,假设你已经安装了卷曲7.10.7+,这是Git在Git 2.3.2 +之前没有检查的东西(2015年第1季度)
Tom G. Christensen (tgc
)解决了这个问题
http:support curl< 7.10.7
Commit dd61399引入了对需要身份验证的http代理的支持,但它依赖于
CURL_PROXYAUTH
选项 在卷曲7.10.7中添加。
这样可以确保只有libcurl支持代理身份验证才能启用代理身份验证。
答案 3 :(得分:1)
Git似乎不支持经过身份验证的代理服务器。你可以查看http.c
from the git.git repository;为了支持经过身份验证的代理服务器,必须设置CURL_PROXYUSERPWD
来设置用户名和密码,但该字符串不会出现在该文件中。
一种可能的解决方案是修复Git;向http.c
添加一些配置参数,例如http.proxyuser
,http.proxypass
,以设置代理的用户名和密码,并http.proxyauth
设置身份验证方法,以及然后将这些传递给适当的cURL configuration options。
如果你不想攻击Git源代码,你可以设置自己的本地代理服务器,不需要身份验证,然后从那里转发到需要身份验证的代理服务器。 Squid支持this mode of operation,但配置可能有点复杂;我发现an example configuration声称可以演示此设置,但我还没有证实它可以自行运行。
编辑:没关系,在检查Squid source code后,它似乎只在向对等方转发请求时支持基本身份验证,而不支持摘要身份验证:
httpHeaderPutStrf(hdr_out, header, "Basic %s", base64_encode(orig_request->peer_login));
我没有找到任何代理服务器可以将请求传递给另一个启用了摘要式身份验证的代理;如果你能找到一个支持上游代理的摘要身份验证,我建议你使用它。
否则,我建议使用与HTTP不同的协议;如果您需要身份验证,请使用ssh:
;如果您只是从公共服务器提取更改,请使用原始git:
协议。
答案 4 :(得分:1)
使用
git config --global http.proxy
或更一般地说, 如果用户或密码具有任何特殊字符(如“ $ \”等),则必须对其进行网址编码,例如:%24%5C
希望这会有所帮助,因为我通常对此感到恼火...
答案 5 :(得分:0)
如果您使用SSH进行克隆,那么密切相关的问题How do I use GitHub through harsh proxies?的答案看起来可以适应您的情况,但不是Corkscrew,而是还不支持摘要式身份验证,请使用{{来自CPAN的3}}。