114 votes

Utilisation d'un proxy socks avec git pour le transport http

Comment faire pour que git utilise un proxy socks pour le transport HTTP ?

J'ai réussi à configurer git avec GIT_PROXY_COMMAND pour utiliser un proxy socks pour le transport GIT.

De plus, j'ai configuré mon fichier .curlrc pour définir le proxy socks et je peux récupérer les informations directement avec la commande curl comme suit :

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

Mais comment utiliser un proxy socks avec git pour récupérer des données en utilisant le protocole de transport HTTP comme :

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

199voto

yangyubo Points 371

J'ai testé avec Git 1.8.2 et un proxy SOCKS v5, la configuration suivante fonctionne pour moi :

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

MISE À JOUR 2017-3-31 :

Selon le document malgré le nom http.proxy il devrait fonctionner pour les urls des référentiels HTTP et HTTPS. Merci à @user d'avoir signalé ce point.

MISE À JOUR 2018-11-27 :

Pour désactiver le proxy, exécutez la commande :

git config --global --unset http.proxy

EDIT 2019-03-04 :

Si vous voulez également que le nom d'hôte soit résolu à l'aide du proxy, utilisez la solution de thuzhf ci-dessous, qui utilise socks5h au lieu de socks5

78voto

ohho Points 17243

Si vous ne voulez pas définir le proxy en tant que configuration globale, essayez de ALL_PROXY= par exemple :

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

64voto

thuzhf Points 503

(Petit rappel) Si vous souhaitez que le nom d'hôte soit également résolu par le proxy (ce qui signifie que en passant tout par le proxy ), notamment lorsque vous clonez un Gist vous pouvez utiliser le paramètre suivant (l'essentiel est qu'il utilise la fonction chaussettes5h au lieu de chaussettes5 ):

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

21voto

alijandro Points 3693

J'utilise la commande suivante pour cloner un dépôt spécifique à partir du proxy socks5. Les paramètres du proxy sont spécifiés avec --config option.

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

8voto

patthoyts Points 8978

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X