Uwaga: łatka została zastosowana do gita w 2015 roku w wersji 2.4.11. Od tego czasu możesz po prostu używać socks: // urls z ustawieniami konfiguracyjnymi http.proxy.
Dla protokołu git: // używamy Gita z proxy SOCKS . Wygląda jednak na to, że git nie obsługuje poprawnie serwerów proxy skarpet. Sam git jest powiązany z libcurl. Więc plik .curlrc nie jest używany (to jest tylko dla klienta wiersza poleceń curl). Jednak następująca poprawka zapewnia niezbędne wsparcie. Po zastosowaniu tej łatki do git możemy po prostu ustawić zmienną środowiskową ALL_PROXY lub HTTP_PROXY lub HTTPS_PROXY na socks://hostname:portnum
(lub socks4 / socks5) lub rzeczywiście ustawienie konfiguracyjne git http.proxy, a libcurl będzie teraz faktycznie używać protokołu socks podczas korzystania z proxy.
Na przykład aktywny ślad:
$ 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 ...
Niezbędna poprawka:
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;