使Git与代理服务器一起使用-因“请求超时”而失败


918

如何让Git使用代理服务器?

我需要从Git服务器中检出代码,但每次都会显示“请求超时”。我该如何解决?

另外,如何设置代理服务器?


这不是git客户端配置项吗?似乎涉及cmd.exe的唯一方面是git客户端可以允许您在环境变量中指定代理。
Michael Burr

我已经编辑了原始问题以删除所有Windows引用,因为此问题本身是git特定的。
PlagueHammer 2010年

3
请注意,您将可以通过git repo url
VonC


3
这个问题的大多数答案都与HTTP代理有关。如果你有一个SOCKS代理,看到这个问题的HTTP / S 协议这一次的混帐://协议。
用户

Answers:


1634

使用命令:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • 更改proxyuser为您的代理用户
  • 更改proxypwd为您的代理密码
  • 更改proxy.server.com为代理服务器的URL
  • 更改8080为代理服务器上配置的代理端口

请注意,这适用于http和https仓库。

如果您决定随时重置此代理并在没有代理的情况下工作:

使用命令:

git config --global --unset http.proxy

最后,检查当前设置的代理:

git config --global --get http.proxy

15
谢谢萨利姆。我的作品在URL中没有proxyuser:proxypwd。
Kwex 2014年

11
谢谢你们。对我来说,这是基于NTLM的身份验证,只是更新我的.gitconfig不起作用:(。因此,我必须获得使用NTLM身份验证的CNTLM。我要做的就是将CNTLM指向网络的代理服务器,然后指向我的软件更新管理器(如百胜,apt-get或者SSH)到本地代理在类似克隆的git操作的情况下,拉http.proxy是我的本地配置代理服务器与本地服务器。
MAYUR Nagekar

9
您好,如果它具有“ @”字符,如何设置proxypass?我知道我必须替这个角色
打假,

13
@patricK您可以%40代替@in用户名/密码字符串,尽管我自己尚未对此进行测试。希望能帮助到你。:-)
Sourav Ghosh 2015年

14
@patricK我可以确认使用%40代替@ works。似乎如果特殊字符不起作用,则应尝试对其进行URL编码。可以在这里找到编码:w3schools.com/tags/ref_urlencode.asp
乔恩

133

在公司防火墙后面的Windows XP中,这对我有用。

除了http://code.google.com/p/msysgit/downloads/list上的 git v1.771之外,我无需安装任何本地代理或任何其他软件?can = 3

$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser =我的IT部门分配的代理用户,就我而言,它是我用来登录PC的Windows用户,即Active Directory用户

proxypwd =我的代理用户的密码

proxy.server.com:8080 =代理名称和端口,我从“控制面板”,“ Internet选项”,“连接”,“局域网设置”按钮,“代理服务器”部分内的“高级”按钮获得,使用第一行(http)中的服务器名称和端口。

mygithubuser =我用来登录github.com的用户

mygithubpwd =我的github.com用户的密码

repoUser =回购的用户所有者

repoName =回购的名称


2
谢谢,谢谢!git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crt加上按simplicidade.org/notes/archives/2011/06/…中所述下载的证书(感谢:stackoverflow.com/a/7206627/98528)为我做到了!
akavel

3
似乎对我有用,但是当我要求它使用git://协议克隆存储库时,git仍然不起作用。
Ajedi32

3
根据对我有用的信息,对pablolic的信息进行了一些澄清:1)如果proxyuser是Windows登录名,则省略AD域,仅包括不包含域的用户名;2)proxypwd中的空格应编码为“ +”。例如,应将“我的密码”输入为“我的密码”。
西蒙·图西

2
@ EdmundYeung99:我建议将%符号替换为@符号。还没有尝试过,但我相信这是标准的URL编码。
西蒙·图西

2
@demongolem:我怀疑您可能需要对密码进行URL编码(还没有尝试过,这只是有根据的猜测)。请在以下答案中查看表中的UrlEncoded列:stackoverflow.com/a/11236038/216440 在您的情况下,这意味着将$替换为%24。
西蒙·图西

52

设置命名的系统变量http_proxy具有的价值ProxyServer:Port。那是最简单的解决方案。分别https_proxy作为大夫在评论中指出的用途。

设置gitproxy(如sleske所提到的)是另一种选择,但是需要一个“命令”,它不如上面的解决方案那么简单。

参考:http : //bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
或者,如果要连接到https存储库,请使用“ https_proxy”。
daefu 2011年

1
@daefu:不知道是否需要设置https_proxy。我已连接到https存储库,并遵循了pablolic的说明的第一步(即,将git.config中的http.proxy添加到git配置文件中)。这就是我所需要的。
西蒙·图西

3
我需要https_proxy。仅设置http_proxy不允许其克隆HTTPS存储库
explunit 2013年

@daefu +1也适用于寡妇github-相关问题:stackoverflow.com/questions/16216176/…–
blue-sky

4
@SimonTewsi @explunit设置环境变量http_proxy对于HTTP URL https_proxy是必需的,而对于HTTPS URL是必需的。或者,可以只all_proxy为所有URL 设置一个。看到ENVIRONMENT在部分卷曲(1) 。但是,在设置git-config选项时,http.proxy它同时用于HTTP和HTTPS URL。看到http.proxyGIT-配置(1)
Susam Pal

43

如果配置代理服务器的命令行方法不起作用,则可以只编辑.gitconfig(在配置文件的根目录中,它可能同时隐藏在C:\ Documents和Settings以及某些网络驱动器中)并添加:

[http]
    proxy = http://username:password@proxy.at.your.org:8080

但是,YMMV仅涵盖命令行配置的第一步。您可能也必须编辑系统git配置,我不知道他们将其隐藏在哪里。


1
“您可能也必须编辑系统git配置”。不,通常不会。系统和用户配置结合在一起;将代理设置为两个之一就足够了。
sleske 2012年

就我而言,它位于我的Windows机器上的[git home] \ etc \ gitconfig中-编辑后它就像一个超级按钮!
巴马利红星队

如果命令行由于特殊字符而不喜欢您的密码,则此功能特别有用。
起源

37

作为使用的替代方法git config --global http.proxy address:port,您可以在命令行上设置代理:

git -c "http.proxy=address:port" clone https://...

优点是代理不是永久设置的。在Bash下,您可以设置一个别名:

alias git-proxy='git -c "http.proxy=address:port"'

22

如果您使用的是ubuntu,请执行以下操作...

步骤1:安装开瓶器

$ sudo apt-get install corkscrew

步骤2:编写一个名为git-proxy.sh的脚本,并添加以下内容

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

步骤3:使脚本可执行

$ chmod +x git-proxy.sh

步骤4:通过设置环境变量来设置GIT的proxy命令

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

现在使用git命令,例如

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

您可能应该使用"$@"而不是$*。有关更多详细信息,请参见您的Shell手册。
海尼克

15

由于.gitconfigWindows中存在多个文件,因此遇到了相同的问题,请按照以下步骤修复该问题:

步骤1:开启Git BASH

步骤2:寻找.gitconfig,执行以下命令:

git config --list --global --show-origin

步骤3:将以下内容复制到中.gitconfig

[http]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

尝试将以下内容放入〜/ .gitconfig文件:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

1
我尝试了以上所有内容。直到我添加了此处列出的https条目,我才能够工作。
布伦特·费舍尔

11

对于git协议(git:// ...),请安装socat并编写如下脚本:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

将其设置为可执行文件,并将其放在您的路径中,并~/.gitconfig设置core.gitproxy为该脚本的名称。


也可以与cygwin的SOCAT一起用于Windows。使用socat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj

1
可以set GIT_PROXY_COMMAND=path\to\script用来使GIT使用代理而不会弄乱git config。
davenpcj

是! 最后正确的提示!我还需要身份验证:exec socat STDIO PROXY:<代理>:$ 1:$ 2,proxyport = <端口>,proxyauth = <用户>:<passwd>在这里找到:gist.github.com/sit/49288
Joachim

11

我发现了一些要分享的内容:

git config --global http.proxy http://<proxy address>:<port number>

上面的方法不适用于ssh网址(即git@github.com:<user name>/<project name>.git):

git clone git@github.com:<user name>/<project name>.git // will not use the http proxy

如果我们通过HTTPS端口设置SSH(https://help.github.com/en/articles/using-ssh-over-the-https-port)因为它只会更改端口(默认为22) )ssh连接连接到。

(不是讲英语的人,请在必要时细化我的语言)


7

我在工作中(state / gov)上使用Windows XP,因此我进行了研究,并在这里找到它,它很适合我。希望这可以帮助 :)

http_proxy环境变量

如果使用代理服务器或防火墙,则可能需要设置http_proxy环境变量,以便从命令行访问某些URL。示例:在Linux上安装ppm for perl或应用rpm,更新ubuntu

使用代理服务器的主机名或IP地址设置http_proxy变量:http_proxy = http:// [proxy.example.org]

如果代理服务器需要用户名和密码,请以以下形式包括它们:http_proxy = http:// [username:password@proxy.example.org]

如果代理服务器使用的端口不是80,则包括以下端口号:http_proxy = http:// [username:password@proxy.example.org:8080]

Windows XP

  1. 打开控制面板,然后单击系统图标。
  2. 在“高级”选项卡上,单击“环境变量”。
  3. 在“系统变量”面板中单击“新建”。
  4. 添加带有适当代理信息的http_proxy(请参见上面的示例)。

Linux,Solaris或HP-UX

使用特定于您的Shell的命令(例如set或export)设置http_proxy环境变量。要使更改永久生效,请将命令添加到外壳程序的相应配置文件中。例如,在bash中,将以下内容添加到.bash_profile或.bashrc文件中:

  1. http_proxy = http:// [用户名:密码@主机名:端口];
  2. 导出$ http_proxy

tanx-> :) C:\ Users \ AT> echo%https_proxy%172.20.4.55:808
qasem

7

除了这些答案,我发现考虑以下两点也很有帮助:

可能需要实施一种身份验证方案:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

同样,通常使用NTLM身份验证架构,可能需要显式提供AD域。

在git bash中:

echo %userdomain%

并相应地更新http.proxy:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

无论如何,可以通过添加CURL日志来帮助调查:

export GIT_CURL_VERBOSE=1

我需要使用添加proxyAuthMethod git config --global http.proxyAuthMethod basic。直到我设置了此配置参数,Git gersion 2.8.3才发送任何身份验证。
HeatfanJohn

5

如果你的tsocksproxychains安装和配置,你可以

$ tsocks git clone <you_repository>

要么

$ proxychains git clone <you_repository>

使其更短,我创建了一个符号链接/usr/bin/pproxychains,这样我就可以使用它像这样

p git clone <you_repository>

我可以用它来代理任何命令,

p <cmd-need-be-proxied>

顺便说一句,proxychains长时间未更新,您可能想尝试proxychians-ng


4

在终端上设置git代理

如果

  • 您不想手动为每个git项目设置代理
  • 总是想对所有项目使用相同的代理

一次全局设置

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

如果您只想为一个git项目设置代理(在某些情况下,对于某些git连接,您可能根本不想使用同一代理或任何代理)

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

如果要显示当前的代理设置

git config --list 

如果要全局删除代理

git config --global --unset http.proxy
git config --global --unset https.proxy

如果您只想删除一个git根的代理

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy

3

这是代理设置

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

3

我遵循这里推荐的大多数答案。首先我得到以下错误:

致命:无法访问' https://github.com/folder/sample.git/':schannel:next InitializeSecurityContext失败:未知错误(0x80092012)-吊销功能无法检查证书的吊销。

然后我尝试了@Salim Hamidi的以下命令

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

但我收到以下错误:

致命:无法访问“ https://github.com/folder/sample.git/”:CONNECT后从代理接收到HTTP代码407

如果代理服务器无法验证SSL证书,则可能会发生这种情况。因此,我们要确保ssl验证已关闭(不建议非信任站点使用),因此我完成了@Arpit建议的以下步骤,但做了一些细微改动:

1.首先请确保删除任何以前的代理设置:

git config --global --unset http.proxy

2.然后列出并获取gitconfig内容

git config --list --show-origin

3.最后更新gitconfig文件的内容,如下所示:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

3

我尝试了上述所有答案,但对我没有任何帮助,因为存在代理密码编码问题。

此命令有效:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

不要在命令中输入密码。当您尝试连接到任何git repo时,它将动态询问。


谢谢,这对我有用。尽管git config设置应为http.proxy
ochhii

用户名还不够,还需要密码。
Dinith

使用此代码{混帐配置--global http.proxy PROXYUSER:proxypwd@proxy.server.com:8080 }
Dinith

2

对于Windows用户:如果git config还是set http_proxy=不行,此答案可能会有所帮助:

用替换git://git仓库的协议http://。请注意http_proxy,无论如何,您都必须设置第一个。


0

经过不懈地尝试此页面上的所有解决方案之后,我的解决方法是改用SSH密钥!

  1. 打开Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. 打开您的Git提供程序(Github,Bitbucket等)
  4. 将id_rsa.pub文件内容复制到Git提供程序的输入页面中(检查您的个人资料)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.