Usando un proxy de calcetines con git para el transporte http

¿Cómo hacer que git use un proxy de calcetines para el transporte http?

Tuve éxito al configurar git con GIT_PROXY_COMMAND para usar un proxy de calcetines para el transporte de GIT.

También he configurado mi file .curlrc para definir el proxy socks y puedo get información directamente con el command curl como:

curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack 

Pero cómo usar un proxy de calcetines con git para recuperar datos usando el protocolo de transporte http como:

 git clone http://git.kernel.org/pub/scm/git 

Probé con Git 1.8.2 y SOCKS v5 proxy, después de la configuration funciona para mí:

git config --global http.proxy 'socks5://127.0.0.1:7070'

ACTUALIZACIÓN 2017-3-31:

De acuerdo con el documento , a pesar del nombre http .proxy , debería funcionar para las URL de repository HTTP y HTTPS. Gracias @user por señalar esto.

Si no desea configurar el proxy como configuration global, intente ALL_PROXY= por ejemplo:

 $ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git 

(Solo un pequeño recordatorio) Si desea que el proxy también resuelva el nombre del host (eso significa pasar todo a través del proxy ), especialmente cuando está clonando una esencia , puede usar la siguiente configuration (la key es que usa calcetines5h en su lugar de calcetines5 ):

 git config --global http.proxy socks5h://127.0.0.1:1080 

Para el protocolo git: // tenemos el uso de Git con un proxy SOCKS . Sin embargo, parece que git no admite correctamente los proxis de los calcetines. git está vinculado a libcurl. Por lo tanto, el file .curlrc no se usa (esto es solo para el cliente de la línea de command curl). Sin embargo, el siguiente parche proporciona el soporte necesario. Con este parche aplicado a git podemos simplemente configurar la variable de entorno ALL_PROXY o HTTP_PROXY o HTTPS_PROXY en socks://hostname:portnum (o socks4 / socks5) o, de hecho, la configuration http.proxy git config y libcurl ahora usarán el protocolo socks cuando se usa el proxy.

Por ejemplo, un rastro activo:

 $ 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.cb/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; 

Uso el siguiente command para clonar un repository específico del proxy socks5. La configuration del proxy se especifica con la opción --config .

 $ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'