Note : le patch ici a été appliqué à git en 2015 pour la version 2.4.11. Depuis cette date, vous pouvez simplement utiliser les urls socks:// avec les paramètres de configuration http.proxy.
Pour le protocole git://, nous avons Utilisation de Git avec un proxy SOCKS . Cependant, il semble que git ne supporte pas correctement les proxies socks. git lui-même est lié à libcurl. Le fichier .curlrc n'est donc pas utilisé (uniquement pour le client en ligne de commande curl). Cependant, le patch suivant fournit le support nécessaire. Avec ce patch appliqué à git, nous pouvons simplement définir la variable d'environnement ALL_PROXY ou HTTP_PROXY ou HTTPS_PROXY à socks://hostname:portnum
(ou socks4/socks5) ou bien le paramètre de configuration git http.proxy et libcurl utilisera désormais le protocole socks lorsqu'il utilisera le proxy.
Par exemple, une trace active :
$ 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 ...
Le patch nécessaire :
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;