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
Yves Blusseau
fuente
La respuesta de patthoyts a continuación se admitirá oficialmente en git 2.7 (diciembre de 2015): stackoverflow.com/a/34118102/6309
VonC
stackoverflow.com/questions/10274879/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

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

Yang.Y
fuente
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
Oh ho
fuente
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
thuzhf
fuente
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'
alijandro
fuente
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;
patthoyts
fuente
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

Paul H
fuente
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
Benyamin Jafari
fuente