注:ここでのパッチは、バージョン2.4.11の2015年にgitに適用されました。それ以降は、http.proxy構成設定でsocks:// urlsを使用できます。
git://プロトコルの場合、SOCKSプロキシでGitを使用します。ただし、gitはsocksプロキシを適切にサポートしていないようです。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;