Usando un proxy de calcetines con git para el transporte http


81

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

Logré configurar git con GIT_PROXY_COMMAND para usar un proxy de calcetines para el transporte GIT.

Además, he configurado mi archivo .curlrc para definir el proxy de calcetines y puedo obtener información directamente con el comando 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


Respuestas:


146

Probé con Git 1.8.2 y el proxy SOCKS v5, la siguiente configuración funciona para mí:

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

ACTUALIZACIÓN 2017-3-31:

Según el documento , a pesar del nombre , debería funcionar para las URL del repositorio HTTP y HTTPS. Gracias @usuario por señalar esto.http.proxy

ACTUALIZACIÓN 2018-11-27:

Para deshabilitar el proxy, ejecute el comando:

git config --global --unset http.proxy

EDITAR 2019-03-04:

Si también desea que el nombre de host se resuelva usando el proxy, use la solución de thuzhf a continuación, que usa en socks5hlugar desocks5


3
brantyoung, ¡Gracias! Olvidé pagar la conexión a Internet y no tenía conexión externa. Utilicé otro servidor como puerta de enlace con: ssh -D 4000 <user> @server -p <port>, y logré subir el proyecto a github a través de: git config http.proxy 'socks5: // localhost: 4000'. Gracias.

Conseguiré dinero y pagaré por Internet :), porque el proyecto está casi listo :)

1
¿Cómo desarmar? ¿lo configuro en ''?
— briankip

2
@briankip abre ~/.gitconfigy elimina [https.proxy]y [http.proxy]secciones, es un iniarchivo, no dudes en editarlo.
— Yang.Y

3
@briankip, creo que puedes ponerlo en la línea de comando en lugar de permanentemente en tu configuración, por ejemplo git -c http.proxy=socks5://127.0.0.1:7070, o algo así. Tal vez usted podría hacer un alias gitsocksde eso, lo que permitiría que llame fácilmente git con y sin calcetines como desired`
— Aaron McDaid

49

Si no desea configurar el proxy como configuración global, intente, ALL_PROXY=por ejemplo:

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

1
¡Gracias! esto realmente me ayuda mientras que el global no lo hace.
— re

1
¡Gracias! REALMENTE FUNCIONA!
— smoothdvd

44

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

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

15

Utilizo el siguiente comando para clonar un repositorio específico del proxy socks5. La configuración del proxy se especifica con la --configopción.

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

Esta es la única solución que funciona para mí, combinada con 'ssh -D xxx'
— Tiana987642

7

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;

Como escribí, logré configurar git para usar socks proxy para el transporte GIT. Lo que quiero es usar git con un proxy de calcetines para el transporte HTTP (S)
— Yves Blusseau

3

Solo en referencia a @briankip y eliminando la configuración del proxy http como lo mencionó Yang.Y, puede editar directamente el archivo ini.

También puede hacer esto en la línea de comando usando

git config --global --unset http.proxy

Para confirmar que se ha eliminado, enumere la configuración actual utilizando

git config --list


1

Ninguno de los métodos sugeridos funcionó para mí, así que encontré otro enfoque como la siguiente instrucción:


  1. Haga un túnel (reenvío de puerto dinámico) sobre el SOCKS5protocolo usando ssh:
    ssh -ND 9994 user@YourSshServer

  1. Instale proxychainsen su localhost, no en el servidor ssh al que está conectado:

  1. Edite su proxychainsarchivo de configuración:
    sudo nano /etc/proxychains.confluego agregue la siguiente línea al final del archivo:
    socks5 127.0.0.1 9994

  1. Ahora estamos listos para hacer un gitcomando ( proxychainsdebe colocarse antes del comando):
    proxychains git push origin develop
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.