将袜子代理与git一起用于http传输


81

如何使git使用socks代理进行HTTP传输?

我成功使用GIT_PROXY_COMMAND配置git以将袜子代理用于GIT传输。

另外,我还配置了.curlrc文件来定义袜子代理,并且可以使用curl命令直接获取信息,例如:

curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack

但是如何将袜子代理与git一起使用以通过HTTP传输协议检索数据,例如:

git clone http://git.kernel.org/pub/scm/git

以下patthoyts的答案将在git 2.7(2015年12月)中得到正式支持:stackoverflow.com/a/34118102/6309
VonC

Answers:


146

我使用Git 1.8.2和SOCKS v5代理进行了测试,以下设置对我有用:

git config --global http.proxy 'socks5://127.0.0.1:7070'

更新2017-3-31:

根据该文档,尽管名称为,但它应同时适用于HTTP和HTTPS存储库URL。感谢@user指出这一点。http.proxy

更新2018-11-27:

要禁用代理,请运行命令:

git config --global --unset http.proxy

编辑2019-03-04:

如果您还希望使用代理解析主机名,请使用下面的thuzhf解决方案,该解决方案使用socks5h而不是socks5


3
brantyoung,谢谢!我忘记支付互联网连接费用,并且没有外部连接。我使用另一台服务器作为网关:ssh -D 4000 <user> @server -p <port>,并成功通过git config http.proxy'socks5:// localhost:4000'将项目上传到github。谢谢。

我会赚钱,我会为互联网付费:),因为项目几乎已经准备就绪:)

1
如何取消设定?设置为“”?
briankip '16

2
@briankip打开~/.gitconfig并删除,[https.proxy]然后选择[http.proxy]节,其为ini文件,可以随时对其进行编辑。
Yang.Y

3
@briankip,我想您可以将其放在命令行上,而不是永久放在您的配置中,例如git -c http.proxy=socks5://127.0.0.1:7070或类似的东西。也许您可以对此做一个别名gitsocks,这将使您可以根据需要轻松地调用带有和不带有袜子的git`
Aaron McDaid

49

如果您不想将代理设置为全局配置,请尝试ALL_PROXY=例如:

$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git

1
谢谢!这确实对我有帮助,而全球性的则对我没有帮助。
重新幻想2015年

1
谢谢!确实有效!
smoothdvd

44

(提醒一下)如果您还希望主机名也由代理服务器解析(这意味着将所有内容都通过代理服务器传递),尤其是在克隆要点时,可以使用以下设置(关键是它改为使用socks5hSOCKS5):

git config --global http.proxy socks5h://127.0.0.1:1080

15

我使用以下命令从socks5代理克隆特定的存储库。代理设置通过--config选项指定。

$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'

这是我唯一的解决方案,与'ssh -D xxx'组合使用
Tiana987642

7

注意:此处的补丁已于2015年应用于2.4.11版的git。从那时起,您可以仅将socks://网址与http.proxy配置设置一起使用。

对于git://协议,我们使用了带有SOCKS代理的Git。但是,看来git无法正确支持袜子代理。git本身链接到libcurl。因此,不使用.curlrc文件(仅用于curl命令行客户端)。但是,以下修补程序提供了必要的支持。将此修补程序应用于git时,我们可以简单地将ALL_PROXY环境变量或HTTP_PROXY或HTTPS_PROXY设置为socks://hostname:portnum(或socks4 / socks5)或实际上是http.proxy git config设置,并且libcurl现在在使用代理时实际上将使用socks协议。

例如,活动跟踪:

$ GIT_CURL_VERBOSE=1 bin-wrappers/git -c "http.proxy=socks://localhost:1080" ls-remote http://github.com/patthoyts/tclftd2xx.git
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to proxy localhost port 1080 (#0)
*   Trying 127.0.0.1...
* connected
* SOCKS4 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET /patthoyts/tclftd2xx.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.1.msysgit.1.dirty
... and on to a successful request ...

必要的补丁:

diff --git a/http.c b/http.c
index 3b312a8..f34cc75 100644
--- a/http.c
+++ b/http.c
@@ -322,6 +322,14 @@ static CURL *get_curl_handle(void)
        if (curl_http_proxy) {
                curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
                curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+#if LIBCURL_VERSION_NUM >= 0x071800
+               if (!strncmp("socks5", curl_http_proxy, 6))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+               else if (!strncmp("socks4a", curl_http_proxy, 7))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
+               else if (!strncmp("socks", curl_http_proxy, 5))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+#endif
        }

        return result;

就像我写的一样,我成功配置了git以将袜子代理用于GIT传输。我想要的是将git与用于HTTP(S)传输的袜子代理一起使用
Yves Blusseau

3

只是引用@briankip并删除了Yang.Y提到的http代理设置,您可以直接编辑ini文件。

您也可以使用以下命令在命令行上执行此操作

git config --global --unset http.proxy

为了确认它已被删除,请使用以下命令列出当前配置

git config --list


1

没有建议的方法对我有用,因此我找到了另一种方法,如下所示:


  1. SOCKS5使用ssh以下协议建立隧道(动态端口转发):
    ssh -ND 9994 user@YourSshServer

  1. proxychains在本地主机上安装,而不要在您连接的ssh服务器上安装:

  1. 编辑您的proxychains配置文件:
    sudo nano /etc/proxychains.conf然后在文件末尾添加以下行:
    socks5 127.0.0.1 9994

  1. 现在我们准备执行git命令(proxychains必须放在命令之前):
    proxychains git push origin develop
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.