Примітка: патч тут був застосований до git у 2015 році для версії 2.4.11. З цього часу ви можете просто використовувати URL-адреси socks: // з налаштуваннями конфігурації http.proxy.
Для протоколу git: // ми використовуємо Git із проксі-сервером SOCKS . Однак, схоже, git не підтримує належним чином проксі-сервери socks. Сам git пов'язаний з libcurl. Отже, файл .curlrc не використовується (тобто саме для клієнта командного рядка curl). Однак наступний патч забезпечує необхідну підтримку. За допомогою цього патча, застосованого до git, ми можемо просто встановити для змінної середовища ALL_PROXY або HTTP_PROXY або HTTPS_PROXY значення socks://hostname:portnum
(або socks4 / socks5), або ж налаштування http.proxy git і 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;