Getting git to work with a proxy server
如何让Git使用代理服务器?
我需要从Git服务器签出代码,它每次都显示"请求超时"。我该怎么解决这个问题?
或者,如何设置代理服务器?
使用命令:
1 | git config --global http.proxy http://proxyuser:[email protected]:8080 |
- 将
proxyuser 更改为代理用户 - 将
proxypwd 更改为代理密码 - 将
proxy.server.com 更改为代理服务器的URL - 将
8080 更改为在代理服务器上配置的代理端口
如果您在任何时候决定重置此代理并且在没有代理的情况下工作:
使用命令:
1 | git config --global --unset http.proxy |
最后,要检查当前设置的代理:
1 | git config --global --get http.proxy |
在公司防火墙后面的WindowsXP中,这对我很有用。
除了http://code.google.com/p/msysgit/downloads/list上的git v1.771,我不需要安装任何本地代理或其他软件?CAN=3
1 2 3 4 | $ git config --global http.proxy http://proxyuser:[email protected]:8080 $ git config --system http.sslcainfo /bin/curl-ca-bundle.crt $ git remote add origin https://mygithubuser:[email protected]/repoUser/repoName.git $ git push origin master |
proxy user=我由IT部门分配的代理用户,在我的例子中,它是我用来登录到我的PC的同一个Windows用户,即Active Directory用户
proxypwd=我的代理用户的密码
proxy.server.com:8080=代理名称和端口,我从"控制面板"、"Internet选项"、"连接"、"LAN设置"按钮、"代理服务器"部分中的"高级"按钮中获取,使用第一行(http)上的服务器名和端口。
mygithubuser=我用来登录github.com的用户
mygithubpwd=我的github.com用户的密码
repo user=回购的用户所有者
回购名称=回购的名称
设置一个名为
设置gitproxy(如sleske提到的)是另一个选项,但这需要一个"命令",这不像上面的解决方案那么简单。
参考文献:http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html
如果配置代理服务器的命令行方式不起作用,您可能只需编辑.gitconfig(在配置文件的根目录中,它可能隐藏在C:documents和settings中以及某些网络驱动器上),然后添加:
1 2 | [http] proxy = http://username:[email protected]:8080 |
但是,这只包括命令行配置的第一步。您可能还需要编辑系统Git配置,我不知道它们将其隐藏在哪里。
作为使用
1 | git -c"http.proxy=address:port" clone https://... |
其优点是代理服务器没有持续设置。在bash下,您可以设置别名:
1 | alias git-proxy='git -c"http.proxy=address:port"' |
如果您使用的是Ubuntu,请执行以下操作…
步骤1:安装螺旋锥
1 | $ sudo apt-get install corkscrew |
步骤2:编写一个名为git-proxy.sh的脚本,并添加以下内容
1 2 3 4 5 6 | #!/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:使脚本可执行
1 | $ chmod +x git-proxy.sh |
步骤4:通过设置环境变量为git设置proxy命令
1 | $ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh" |
现在使用git命令,例如
1 | git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |
由于Windows中存在多个
第一步:打开Git bash
步骤2:查找
1 | git config --list --global --show-origin |
第三步:在
1 2 3 4 5 6 7 8 9 10 11 12 | [http] proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT sslverify = false [https] proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT sslverify = false [url"http://github.com/"] insteadOf = git://github.com/ [user] name = Arpit Aggarwal email = [email protected] |
尝试将以下内容放入~/.gitconfig文件:
1 2 3 4 5 6 | [http] proxy = http://proxy:8080 [https] proxy = http://proxy:8080 [url"https://"] insteadOf = git:// |
对于git协议(git://…),安装socat并编写脚本,如:
1 2 3 | #!/bin/sh exec socat - socks4:your.company.com:$1:$2 |
使其可执行,放在您的路径中,并在您的
除了这些答案之外,我发现考虑这两点很有帮助:
可能需要强制实施身份验证方案:
1 2 3 | [http] # https://github.com/git/git/blob/master/Documentation/config.txt proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm |
另外,通常使用NTLM身份验证模式,可能需要明确地提供AD域。
在Git BASH中:
1 | echo %userdomain% |
并相应地更新http.proxy:
1 | git config --global http.proxy http://DOMAIN\\proxyuser:[email protected]:8080 |
无论如何,添加curl日志有助于调查:
1 | export GIT_CURL_VERBOSE=1 |
我注意到了一些事情,想在这里分享:
1 | git config --global http.proxy http://<proxy address>:<port number> |
上述方法不适用于ssh URL:(即
1 | git clone [email protected]:<user name>/<project name>.git // this will not use the above proxy! |
如果我们通过https端口(https://help.github.com/en/articles/using-ssh-over-the-https-port)设置ssh,事情就不会改变,因为它只改变ssh连接所连接的端口(默认为22)。
(不是本地人,如有必要请修改我的话)
我在工作中使用windows xp(state/gov),所以我做了研究,在这里找到了这个,它对我很有用。希望这有帮助:)
http_proxy环境变量
如果使用代理服务器或防火墙,则可能需要设置http_proxy环境变量,以便从命令行访问某些URL。示例:为Perl安装PPM或在Linux中应用RPM,更新Ubuntu
使用代理服务器的主机名或IP地址设置http_proxy变量:http_proxy=http://[代理.example.org]
如果代理服务器需要用户名和密码,请将其包含在以下表单中:http_proxy=http://[用户名:[email protected]]
如果代理服务器使用的端口不是80,请包括端口号:http_proxy=http://[用户名:[email protected]:8080]
视窗XP
Open the Control Panel and click the System icon. On the Advanced tab, click on Environment Variables. Click New in the System variables panel. Add http_proxy with the appropriate proxy information (see examples above).
Linux、Solaris或HP-UX
使用特定于shell的命令(例如set或export)设置http_proxy环境变量。要使此更改持久化,请将命令添加到外壳的相应配置文件中。例如,在bash中,在.bash_概要文件或.bashrc文件中添加如下行:
http_proxy=http:// [username:password@hostname:port]; export $http_proxy
如果安装并配置了tsocks或proxychains,则可以
1 | $ tsocks git clone <you_repository> |
或
1 | $ proxychains git clone <you_repository> |
为了缩短时间,我为
1 | p git clone <you_repository> |
我可以用它来代理任何命令,
1 | p <cmd-need-be-proxied> |
顺便说一下,proxychains已经很久没有更新了,您可能想试试proxychains ng
在终端上设置Git代理
如果
- 您不希望手动为每个Git项目逐个设置代理
- 总是希望对所有项目使用相同的代理
全局设置一次
1 2 | git config --global http.proxy username:password@proxy_url:proxy_port git config --global https.proxy username:password@proxy_url:proxy_port |
如果只想为一个Git项目设置代理(在某些情况下,您可能不希望对某些Git连接使用相同的代理或任何代理)
1 2 3 4 5 | //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 |
如果要显示当前代理设置
1 | git config --list |
如果要全局删除代理
1 2 | git config --global --unset http.proxy git config --global --unset https.proxy |
如果只想删除一个git根目录的代理
1 2 3 4 | //go to project root cd /bla-bla/project_root git config --unset http.proxy git config --unset https.proxy |
对于Windows用户:如果
用
这是代理设置
1 2 | git config --global http.proxy http://<username>:<pass>@<ip>:<port> git config --global https.proxy http://<username>:<pass>@<ip>:<port> |
我遵循了这里推荐的大部分答案。首先,我得到了以下错误:
fatal: unable to access
'https://github.com/folder/sample.git/': schannel: next
InitializeSecurityContext failed: Unknown error (0x80092012) - The
revocation function was unable to check revocation for the
certificate.
然后我尝试了@salim hamidi的以下命令
1 | git config --global http.proxy http://proxyuser:[email protected]:8080 |
但我有以下错误:
fatal: unable to access
'https://github.com/folder/sample.git/': Received HTTP code
407 from proxy after CONNECT
如果代理服务器无法验证SSL证书,则可能发生这种情况。因此,我们要确保关闭了SSL验证(不建议用于不受信任的站点),因此我已经完成了@arpit建议的以下步骤,但做了一些细微的更改:
1.首先确保删除任何以前的代理设置:
1 | git config --global --unset http.proxy |
2.然后列出并获取gitconfig内容
1 | git config --list --show-origin |
3.上次更新gitconfig文件内容如下:
1 2 3 4 5 6 7 8 | [http] sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt sslBackend = schannel proxy = http://proxyuser:[email protected]:8080 sslverify = false [https] proxy = http://proxyuser:[email protected]:8080 sslverify = false |
在不知疲倦地尝试了这个页面上的每一个解决方案之后,我的工作就是使用和ssh密钥!
我已经尝试了以上所有的答案,但没有任何效果,因为存在代理密码编码问题。
此命令有效:
1 | git config --global http-proxy http://[email protected]:PortNumber |
不要在命令中输入密码。当您尝试连接到任何Git回购时,它将动态地询问。