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

我需要从Git服务器签出代码,但它每次都显示“请求超时”。我该怎么解决这个问题呢?

或者如何设置代理服务器?


当前回答

在终端上设置git代理

if

您不希望为每个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

其他回答

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

可能需要强制一个身份验证方案:

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

此外,通常使用NTLM身份验证模式时,可能需要显式地提供AD域。

在git bash中:

echo %userdomain%

并更新http。相应的代理:

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

无论如何,添加CURL日志可能有助于调查:

export GIT_CURL_VERBOSE=1

设置一个名为http_proxy的系统变量,其值为“ProxyServer:Port”。 这是最简单的解决办法。分别使用daefu在评论中指出的https_proxy。

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

引用: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html

作为使用git配置的替代方案——global http。代理地址:端口,可以在命令行设置代理:

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

优点是代理不需要持久设置。在Bash下你可以设置一个别名:

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

如果你正在使用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设置代理命令

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

现在使用git命令,例如

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

我遵循了这里推荐的大部分答案。首先,我得到了以下错误:

致命:无法访问 https://github.com/folder/sample.git/':频道:下一个 InitializeSecurityContext失败:未知错误(0x80092012) 属性的撤销功能无法检查 证书。

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

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

但我得到了以下错误:

致命:无法访问 'https://github.com/folder/sample.git/':接收到的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