让Git使用代理服务器-以“请求超时”失败

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

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

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

1231512 次浏览

设置一个名为http_proxy的系统变量,值为ProxyServer:Port。这是最简单的解决方案。分别使用https_proxy,正如大夫在评论中指出的那样。

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

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

这对我来说很有效,在企业防火墙后面的Windows XP中。

我不必安装任何本地代理或任何其他软件,除了git v1.771从http://code.google.com/p/msysgit/downloads/list?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

代理用户=我们的IT部门分配给我的代理用户,在我的情况下,它是我用来登录我的PC的同一个Windows用户,Active Directory用户

proxypwd=我的代理用户的密码

proxy.server.com:8080=代理名称和端口,我从控制面板,Internet选项,连接,LAN设置按钮,代理服务器部分内的高级按钮中获得,使用第一行(超文本传输协议)的服务器名和端口。

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

mygithubpwd=github.com用户的密码

审核人=仓库的用户所有者

存储名称=存储库的名称

如果配置代理服务器的命令行方式不起作用,您可能只需编辑. gitconfig(在您的配置文件的根目录中,它可能隐藏在C:\Documents and Set和某些网络驱动器中)并添加以下内容:

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

不过,YMMV,这只涵盖了命令行配置的第一步。您可能还需要编辑系统git配置,我不知道他们将其隐藏在哪里。

要使用的命令:

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

请注意,这适用于超文本传输协议和https存储库。

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

要使用的命令:

git config --global --unset http.proxy

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

git config --global --get http.proxy

如果您使用的是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

我在工作中使用Windows XP(state/gov),所以我做了我的研究,在这里发现了这个它对我有用。希望这有帮助:)

http_proxy环境变量

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

使用代理服务器的主机名或IP地址设置http_proxy变量:http_proxy=超文本传输协议://[proxy.example.org]

如果代理服务器需要用户名和密码,请以以下形式包含它们:http_proxy=超文本传输协议://[用户名:password@proxy.example.org]

如果代理服务器使用80以外的端口,请包含端口号:http_proxy=超文本传输协议://[用户名:password@proxy.example.org: 8080]

WindowsXP

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

Linux、Solaris或HP-用户体验

使用特定于shell的命令设置http_proxy环境变量(例如设置或导出)。要使此更改持久化,请将命令添加到shell的相应配置文件中。例如,在bash中,在.bash_profile或. bashrc文件中添加如下行:

  1. http_proxy=超文本传输协议://[用户名:password@hostname:端口];
  2. 出口http_proxy

对于git协议(git://…),安装Socat并编写一个脚本,例如:

#!/bin/sh
exec socat - socks4:your.company.com:$1:$2

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

对于Windows用户:如果git configset http_proxy=不起作用,这个答案可能会有所帮助:

将git存储库的git://协议替换为http://。请注意,无论如何,您必须先设置http_proxy

如果您安装并配置了<强>t袜子代理链,则可以

$ tsocks git clone <you_repository>

$ proxychains git clone <you_repository>

为了使它更短,我为proxychains创建了一个符号链接/usr/bin/p,所以我可以这样使用它

p git clone <you_repository>

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

p <cmd-need-be-proxied>

顺便说一句,代理链很久没有更新了,你可能想试试proxychians-ng

作为使用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"'

在终端上设置git代理

如果

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

全局设置一次

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

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

//go to project rootcd /bla_bla/project_root//set proxy for both http and httpsgit config http.proxy username:password@proxy_url:proxy_portgit config https.proxy username:password@proxy_url:proxy_port

如果要显示当前代理设置

git config --list

如果您想全局删除代理

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

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

//go to project rootcd /bla-bla/project_rootgit config --unset http.proxygit config --unset https.proxy

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

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

由于Windows中存在多个.gitconfig文件而面临相同的问题,请按照以下步骤修复相同的问题:

步骤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.PORTsslverify = false[https]proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORTsslverify = false[url "http://github.com/"]insteadOf = git://github.com/
[user]name = Arpit Aggarwalemail = aggarwalarpit.89@gmail.com

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

可能需要强制执行身份验证方案:

[http]# https://github.com/git/git/blob/master/Documentation/config.txtproxyAuthMethod = 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

这是代理设置

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

在不知疲倦地尝试了这个页面上的每个解决方案之后,我的工作是使用和SSH密钥!

  1. 打开Git Bash
  2. $ssh-keygen.exe-t rsa-c
  3. 打开您的Git提供商(Github、Bitucket等)
  4. 将id_rsa.pub文件内容复制到Git提供者的输入页面(检查您的配置文件)

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

致命:无法访问'https://github.com/folder/sample.git/': schannel:下一个节点初始化安全上下文失败:未知错误(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验证已关闭(不建议非受信任的站点使用),因此我执行了以下步骤,这些步骤是@Arbit推荐的,但略有更改:

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.crtsslBackend = schannelproxy = http://proxyuser:proxypwd@proxy.server.com:8080sslverify = false[https]proxy = http://proxyuser:proxypwd@proxy.server.com:8080sslverify = false

我已经尝试了上述所有答案,但没有任何效果,因为存在代理密码编码问题。

这个命令工作:

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

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

我发现了一件事,想在这里分享:

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

上面的方法不适用于SSHURL(即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端口(https://help.github.com/en/articles/using-ssh-over-the-https-port)设置SSH,情况不会改变,因为它只会更改SSH连接连接的端口(默认为22)。

使用代理的另一种方法是使用SSH然后使用ssh-keygen命令,它给你一个公钥,你可以在你的GitLab或Gitab帐户设置中设置并相应地完成登录…

1-通过在Git客户端中运行git remote -v来验证正在使用哪些远程数据库。

2-如果这是超文本传输协议url,将其更改为ssh地址,运行:git remote set-url <remote name, e.g. origin> <new SSH URL>例如

git remote set-url git@gitlab.com:example/myproject.git

3-要为登录生成ssh密钥,请运行:ssh-keygen -o,此命令生成公钥(id_rsa.pub文件)和私钥。

4复制公钥内容。(从id_rsa.pub文件)

5-转到gitlab/githup/……配置文件部分>设置/ssh-key。创建新的ssh密钥并粘贴公钥内容