Nota: el parche aquí se aplicó a git en 2015 para la versión 2.4.11. Desde ese momento, puede usar socks: // urls con los ajustes de configuración http.proxy.
Para el protocolo git: // tenemos Using Git con un proxy SOCKS . Sin embargo, parece que git no admite adecuadamente los proxies de calcetines. git en sí está vinculado a libcurl. Entonces, el archivo .curlrc no se usa (eso es solo para el cliente de línea de comando curl). Sin embargo, el siguiente parche proporciona el soporte necesario. Con este parche aplicado a git, simplemente podemos configurar la variable de entorno ALL_PROXY o HTTP_PROXY o HTTPS_PROXY en socks://hostname:portnum
(o socks4 / socks5) o, de hecho, la configuración http.proxy git config y libcurl ahora usará el protocolo socks cuando use el proxy.
Por ejemplo, una traza activa:
$ 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 ...
El parche necesario:
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;