Lưu ý: bản vá ở đây đã được áp dụng cho git vào năm 2015 cho phiên bản 2.4.11. Kể từ thời điểm đó, bạn chỉ có thể sử dụng vớ: // urls với cài đặt cấu hình http.proxy.
Đối với giao thức git: //, chúng tôi có Sử dụng Git với proxy SOCKS . Tuy nhiên, có vẻ như git không hỗ trợ đúng proxy cho vớ. bản thân git được liên kết với libcurl. Vì vậy, tệp .curlrc không được sử dụng (chỉ dành cho máy khách dòng lệnh curl). Tuy nhiên, bản vá sau cung cấp những hỗ trợ cần thiết. Với bản vá này được áp dụng cho git, chúng tôi có thể chỉ cần đặt biến môi trường ALL_PROXY hoặc HTTP_PROXY hoặc HTTPS_PROXY thành socks://hostname:portnum
(hoặc vớ4 / vớ5) hoặc thực sự là cài đặt cấu hình http.proxy git và libcurl giờ sẽ thực sự sử dụng giao thức vớ khi sử dụng proxy.
Ví dụ, một dấu vết hoạt động:
$ 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 ...
Bản vá cần thiết:
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;