web-dev-qa-db-fra.com

Utiliser un proxy socks avec git pour le transport http

Comment faire en sorte que git utilise un proxy chaussettes 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 ceci:

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 tel que:

git clone http://git.kernel.org/pub/scm/git
50
Yves Blusseau

J'ai testé avec les proxy Git 1.8.2 et SOCKS v5, les réglages suivants fonctionnent 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 URL de référentiel HTTP et HTTPS. Merci à l'utilisateur de l'avoir signalé.

MISE À JOUR 2018-11-27:

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

git config --global --unset http.proxy

100
Yang.Y

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

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

(Juste un petit rappel) Si vous voulez que le nom d’hôte soit également résolu par le proxy (c’est-à-dire que tout passe par le proxy), en particulier lorsque vous clonez un Gist, vous pouvez utiliser le paramètre suivant ( la clé est qu'il utilise socks5h au lieu de socks5):

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

J'utilise la commande suivante pour cloner un référentiel spécifique à partir du proxy socks5. Les paramètres de proxy sont spécifiés avec l'option --config.

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

Pour le protocole git: // nous avons Utilisation de Git avec un proxy SOCKS . Cependant, il semble que git ne supporte pas correctement les proxy de chaussettes. git lui-même est lié à libcurl. Le fichier .curlrc n’est donc pas utilisé (c’est uniquement pour le client en ligne de commande curl). Cependant, le correctif suivant fournit le support nécessaire. Avec ce correctif appliqué à git, nous pouvons simplement définir la variable d’environnement ALL_PROXY, HTTP_PROXY ou HTTPS_PROXY sur socks://hostname:portnum (ou socks4/socks5) ou bien le paramètre http.proxy git config et libcurl utilisera le protocole socks lors de l’utilisation du 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;
6
patthoyts

Juste en référence à @briankip et en supprimant le paramètre de proxy http comme indiqué par Yang.Y, vous pouvez directement modifier le fichier ini.

Vous pouvez également le faire sur la ligne de commande en utilisant

git config --global --unset http.proxy

Pour confirmer qu’il a été supprimé, listez la configuration actuelle à l’aide de

git config --list

3
Paul H

Vous pouvez essayer le proxy réseau temporaire ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/your/link.git 8888 est votre port proxy, vous pouvez le modifier, généralement en 1080.

0
WeiCrane