Faire fonctionner Git avec un serveur proxy - échoue avec «Délai d'expiration de la demande»

918

Comment faire en sorte que Git utilise un serveur proxy?

Je dois extraire le code d'un serveur Git, mais il affiche "Request timed out" à chaque fois. Comment puis-je contourner cela?

Sinon, comment puis-je configurer un serveur proxy?

PlagueHammer
la source
Ne serait-ce pas un élément de configuration du client git? Le seul aspect de cela qui semble impliquer cmd.exe est que le client git peut vous permettre de spécifier un proxy dans une variable d'environnement.
Michael Burr
J'ai modifié la question d'origine pour supprimer toutes les références Windows, car ce problème est spécifique à git en soi.
PlagueHammer
3
Notez que vous pourrez configurer un proxy par URL de dépôt git!
VonC
1
Cette question est très similaire à " Comment puis-je extraire d'un référentiel Git via un proxy HTTP?" .
Derek Mahar
3
La plupart des réponses à cette question concernent les proxys HTTP. Si vous avez un proxy SOCKS, reportez - vous à cette question pour le HTTP / S protocoles et celui - ci pour le protocole git: //.
utilisateur

Réponses:

1634

Commande à utiliser:

git config --global http.proxy http://proxyuser:[email protected]:8080
  • changer proxyuserpour votre utilisateur proxy
  • changer proxypwdvotre mot de passe proxy
  • changer proxy.server.coml'URL de votre serveur proxy
  • changer 8080le port proxy configuré sur votre serveur proxy

Notez que cela fonctionne pour les référentiels http et https.

Si vous décidez à tout moment de réinitialiser ce proxy et de travailler sans proxy:

Commande à utiliser:

git config --global --unset http.proxy

Enfin, pour vérifier le proxy actuellement défini:

git config --global --get http.proxy
Salim Hamidi
la source
15
Merci Salim. Le mien a fonctionné sans le proxyuser: proxypwd dans l'URL.
Kwex
11
Merci les gars. Pour moi, c'était l'authentification basée sur NTLM et la mise à jour de mon .gitconfig ne fonctionnait pas :(. J'ai donc dû obtenir CNTLM qui utilise l'authentification NTLM. Tout ce que j'avais à faire était de pointer mon CNTLM vers le serveur proxy de mon réseau, puis de pointer mon logiciel gestionnaire de mise à jour (comme yum, apt-get ou ssh) vers le proxy local. En cas d'opérations git comme clone, tirez le http.proxy était mon proxy configuré localement avec le serveur local.
Mayur Nagekar
9
Bonjour, comment puis-je définir le proxypass s'il a le caractère "@"? Je sais que je dois scape ce personnage mais je ne sais pas comment .. Merci
patricK
13
@patricK Vous pouvez utiliser %40en remplacement de la @chaîne in username / password, bien que je ne l'ai pas testé moi-même. J'espère que cela aide. :-)
Sourav Ghosh
14
@patricK Je peux confirmer que l'utilisation de% 40 en remplacement de @ fonctionne. Il semble que si un caractère spécial ne fonctionne pas, vous devriez essayer de le coder par URL. Les encodages se trouvent ici: w3schools.com/tags/ref_urlencode.asp
Jon
133

Cela a fonctionné pour moi, dans Windows XP derrière un pare-feu d'entreprise.

Je n'ai pas eu à installer de proxy local ou tout autre logiciel en plus de git v1.771 depuis http://code.google.com/p/msysgit/downloads/list?can=3

$ git config --global http.proxy http://proxyuser:[email protected]:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:[email protected]/repoUser/repoName.git
$ git push origin master

proxyuser = l'utilisateur proxy qui m'a été attribué par notre service informatique, dans mon cas, c'est le même utilisateur Windows que j'utilise pour me connecter à mon PC, l'utilisateur Active Directory

proxypwd = le mot de passe de mon utilisateur proxy

proxy.server.com:8080 = le nom et le port du proxy, je l'ai obtenu à partir du Panneau de configuration, Options Internet, Connexions, bouton Paramètres LAN, bouton Avancé dans la section Serveur proxy, utilisez le nom du serveur et le port sur la première ligne (http) .

mygithubuser = l'utilisateur que j'utilise pour me connecter à github.com

mygithubpwd = le mot de passe de mon utilisateur github.com

repoUser = l'utilisateur propriétaire du référentiel

repoName = le nom du repo

alvaro
la source
2
Hourra, merci! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtainsi que les certificats téléchargés comme décrit dans simplicidade.org/notes/archives/2011/06/… (merci à: stackoverflow.com/a/7206627/98528 ) l'ont fait pour moi!
akavel
3
Semble fonctionner pour moi, mais git ne fonctionne toujours pas quand je lui demande de cloner un référentiel en utilisant le git://protocole.
Ajedi32
3
Quelques clarifications aux informations de pablolic, basées sur ce qui a fonctionné pour moi: 1) Si proxyuser est une connexion Windows, omettez le domaine AD, incluez simplement le nom d'utilisateur sans le domaine; 2) Les espaces dans le proxypwd doivent être encodés en "+". Par exemple, "Mon mot de passe" doit être entré comme "Mon + mot de passe".
Simon Tewsi
2
@ EdmundYeung99: Je suggère de remplacer le symbole @ par% 40. Je ne l'ai pas essayé, mais je pense que c'est un encodage URL standard.
Simon Tewsi
2
@demongolem: Je suppose que vous devrez peut-être encoder votre mot de passe par URL (je ne l'ai pas essayé, c'est juste une supposition éclairée). Voir la colonne UrlEncoded dans le tableau dans la réponse suivante: stackoverflow.com/a/11236038/216440 Dans votre cas, cela signifierait remplacer le $ par% 24.
Simon Tewsi
52

Définissez une variable système nommée http_proxyavec la valeur de ProxyServer:Port. C'est la solution la plus simple. Respectivement, utilisez https_proxycomme daefu l'a souligné dans les commentaires.

Définir gitproxy (comme le mentionne sleske) est une autre option, mais cela nécessite une "commande", qui n'est pas aussi simple que la solution ci-dessus.

Références: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html

PlagueHammer
la source
10
Ou utilisez 'https_proxy' si vous vous connectez à un référentiel https.
daefu
1
@daefu: Je ne sais pas si vous devez définir https_proxy. Je suis connecté à un référentiel https et j'ai suivi la première étape des instructions de pablolic (ie ajouter http.proxy au fichier de configuration git). C'est tout ce qu'il m'a fallu.
Simon Tewsi
3
https_proxy était requis pour moi. Définir uniquement http_proxy ne lui a pas permis de cloner un
dépôt
@daefu +1 cela fonctionne aussi avec les veuves github - question connexe: stackoverflow.com/questions/16216176/…
blue-sky
4
@SimonTewsi @explunit Lors de la définition des variables d'environnement http_proxyest requise pour les URL HTTP et https_proxyest requise pour les URL HTTPS. Alternativement, on pourrait simplement définir all_proxypour toutes les URL. Voir la ENVIRONMENTsection dans curl (1) . Cependant, lors de la définition des options de git-config, http.proxyest utilisé pour les URL HTTP et HTTPS. Voir http.proxydans git-config (1) .
Susam Pal
43

Si la méthode de configuration de votre serveur proxy en ligne de commande ne fonctionne pas, vous pouvez probablement simplement modifier .gitconfig (à la racine de votre profil, qui peut se cacher à la fois dans C: \ Documents and Settings et sur un lecteur réseau) et l'ajouter :

[http]
    proxy = http://username:[email protected]:8080

YMMV cependant, cela ne couvre que la première étape de la configuration de la ligne de commande. Vous devrez peut-être également modifier la configuration du système git et je ne sais pas où ils l'ont caché.

Randakar
la source
1
Msgstr "Vous devrez peut - être aussi modifier la configuration du système git". Non, généralement pas. Le système et la configuration utilisateur sont combinés; définir le proxy dans l'un des deux devrait être suffisant.
sleske
Dans mon cas, il se trouve sur ma machine Windows dans [git home] \ etc \ gitconfig - après modification, cela fonctionne comme un charme!
Barmaley Red Star
Ceci est particulièrement utile si la ligne de commande n'aime pas votre mot de passe en raison de caractères spéciaux.
Origine
37

Comme alternative à l'utilisation git config --global http.proxy address:port, vous pouvez définir le proxy sur la ligne de commande:

git -c "http.proxy=address:port" clone https://...

L'avantage est que le proxy n'est pas défini de manière persistante. Sous Bash, vous pouvez définir un alias:

alias git-proxy='git -c "http.proxy=address:port"'
Steve Pitchers
la source
22

Si vous utilisez ubuntu, procédez comme suit ...

Étape 1: installer le tire-bouchon

$ sudo apt-get install corkscrew

Étape 2: Écrivez un script nommé git-proxy.sh et ajoutez ce qui suit

#!/bin/sh

exec corkscrew <name of proxy server> <port> $*

# <name_of_proxy_server> and <port> are the ip address and port of the server
# e.g. exec corkscrew 192.168.0.1 808 $*

Étape 3: rendre le script exécutable

$ chmod +x git-proxy.sh

Étape 4: configurer la commande proxy pour GIT en définissant la variable d'environnement

$ export GIT_PROXY_COMMAND="/<path>/git-proxy.sh"

Utilisez maintenant les commandes git, telles que

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Sk Hasanujjaman
la source
Vous devriez probablement utiliser à la "$@"place de $*. Consultez le manuel de votre shell pour plus de détails.
Hynek -Pichi- Vychodil
15

Face au même problème en raison de plusieurs .gitconfigfichiers dans Windows, suivi des étapes ci-dessous pour résoudre le même:

Étape 1: Ouvrez Git BASH

Étape 2: Recherchez .gitconfig, exécutez la commande suivante:

git config --list --global --show-origin

Étape 3: copiez le contenu ci-dessous dans .gitconfig:

[http]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:[email protected]:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = [email protected]
Arpit Aggarwal
la source
12

Essayez de mettre ce qui suit dans le fichier ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://
augustocbx
la source
1
J'ai essayé toutes les choses ci-dessus. Ce n'est que lorsque j'ai ajouté l'entrée https répertoriée ici que j'ai pu travailler.
Brent Fisher
11

Pour le protocole git (git: // ...), installez socat et écrivez un script tel que:

#!/bin/sh

exec socat - socks4:your.company.com:$1:$2

rendez-le exécutable, mettez-le dans votre chemin et dans votre ~/.gitconfigensemble core.gitproxyau nom de ce script.

ashutosh
la source
Fonctionne également pour Windows avec SOCAT de cygwin. en utilisantsocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj
1
Peut utiliser set GIT_PROXY_COMMAND=path\to\scriptpour que GIT utilise le proxy sans jouer avec git config.
davenpcj
Oui! Enfin le bon indice! J'avais également besoin d'une authentification: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Trouvé ici: gist.github.com/sit/49288
Joachim
11

Il y a quelque chose que j'ai remarqué et que je veux partager ici:

git config --global http.proxy http://<proxy address>:<port number>

La méthode ci-dessus ne fonctionnera pas pour les URL ssh (c.-à-d. [email protected]:<user name>/<project name>.git):

git clone [email protected]:<user name>/<project name>.git // will not use the http proxy

Et les choses ne changeront pas si nous définissons SSH sur le port HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ) car il ne change que le port (22 par défaut ) la connexion ssh se connecte à.

(Pas un locuteur natif anglais, veuillez affiner mes mots si nécessaire)

miáo
la source
7

Je travaille sur Windows XP au travail (état / gouvernement), j'ai donc fait mes recherches et trouvé cela ici et cela a fonctionné pour moi. J'espère que cela t'aides :)

La variable d'environnement http_proxy

Si vous utilisez un serveur proxy ou un pare-feu, vous devrez peut-être définir la variable d'environnement http_proxy afin d'accéder à une URL à partir de la ligne de commande. Exemple: installation de ppm pour perl ou application de rpm sous linux, mise à jour d'ubuntu

Définissez la variable http_proxy avec le nom d'hôte ou l'adresse IP du serveur proxy: http_proxy = http: // [proxy.example.org]

Si le serveur proxy nécessite un nom d'utilisateur et un mot de passe, incluez-les sous la forme suivante: http_proxy = http: // [nom d'utilisateur: [email protected]]

Si le serveur proxy utilise un port autre que 80, incluez le numéro de port: http_proxy = http: // [nom d'utilisateur: [email protected]: 8080]

Windows XP

  1. Ouvrez le Panneau de configuration et cliquez sur l'icône Système.
  2. Dans l'onglet Avancé, cliquez sur Variables d'environnement.
  3. Cliquez sur Nouveau dans le panneau Variables système.
  4. Ajoutez http_proxy avec les informations de proxy appropriées (voir les exemples ci-dessus).

Linux, Solaris ou HP-UX

Définissez la variable d'environnement http_proxy à l'aide de la commande spécifique à votre shell (par exemple, définir ou exporter). Pour rendre cette modification persistante, ajoutez la commande au fichier de profil approprié pour le shell. Par exemple, dans bash, ajoutez une ligne comme celle-ci à votre fichier .bash_profile ou .bashrc:

  1. http_proxy = http: // [nom d'utilisateur: mot de passe @ nom d'hôte: port];
  2. exporter $ http_proxy
Shak Daniel
la source
tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem
7

En plus de ces réponses, j'ai trouvé utile de considérer ces 2 points:

Il peut être nécessaire d'appliquer un schéma d'authentification:

[http]
    # https://github.com/git/git/blob/master/Documentation/config.txt
    proxyAuthMethod = anyauth|basic|digest|negotiate|ntlm

En outre, généralement avec le schéma d'authentification NTLM, il peut être nécessaire de fournir explicitement le domaine AD.

Dans git bash:

echo %userdomain%

Et mettez à jour le http.proxy en conséquence:

git config --global http.proxy http://DOMAIN\\proxyuser:[email protected]:8080

Quoi qu'il en soit, l'enquête peut être aidée en ajoutant des journaux CURL:

export GIT_CURL_VERBOSE=1
blacelle
la source
J'avais besoin d'ajouter proxyAuthMethod en utilisant git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 n'a envoyé aucune authentification tant que je n'ai pas défini ce paramètre de configuration.
HeatfanJohn
5

Si vous avez installé et configuré des tsocks ou des chaînes proxy , vous pouvez

$ tsocks git clone <you_repository>

ou

$ proxychains git clone <you_repository>

pour le raccourcir, j'ai créé un lien symbolique /usr/bin/ppour proxychainsque je puisse l'utiliser comme ceci

p git clone <you_repository>

et je peux l'utiliser pour proxy n'importe quelle commande,

p <cmd-need-be-proxied>

au fait, les proxychains ne sont pas mis à jour depuis longtemps, vous pouvez essayer proxychians-ng

fangxing
la source
4

Configurer git proxy sur le terminal

si

  • vous ne voulez pas définir manuellement le proxy pour chacun de vos projets git, un par un
  • toujours vouloir utiliser le même proxy pour tous vos projets

Réglez-le globalement une fois

git config --global http.proxy username:password@proxy_url:proxy_port
git config --global https.proxy username:password@proxy_url:proxy_port

si vous souhaitez définir un proxy pour un seul projet git (il peut y avoir des situations où vous ne souhaitez peut-être pas utiliser le même proxy ou un proxy pour certaines connexions git)

//go to project root
cd /bla_bla/project_root
//set proxy for both http and https
git config http.proxy username:password@proxy_url:proxy_port
git config https.proxy username:password@proxy_url:proxy_port

si vous souhaitez afficher les paramètres proxy actuels

git config --list 

si vous souhaitez supprimer le proxy globalement

git config --global --unset http.proxy
git config --global --unset https.proxy

si vous souhaitez supprimer le proxy pour une seule racine git

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy
Add080bbA
la source
3

voici le paramètre proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
hannad rehman
la source
3

J'ai suivi la plupart des réponses recommandées ici. J'ai d'abord eu l'erreur suivante:

fatal: impossible d'accéder à ' https://github.com/folder/sample.git/ ': schannel: next InitializeSecurityContext a échoué: erreur inconnue (0x80092012) - La fonction de révocation n'a pas pu vérifier la révocation du certificat.

J'ai ensuite essayé la commande suivante de @Salim Hamidi

git config --global http.proxy http://proxyuser:[email protected]:8080

Mais j'ai eu l'erreur suivante:

fatal: impossible d'accéder à ' https://github.com/folder/sample.git/ ': code HTTP 407 reçu du proxy après CONNECT

Cela peut se produire si le serveur proxy ne peut pas vérifier le certificat SSL. Nous voulons donc nous assurer que la vérification ssl est désactivée (non recommandé pour les sites non approuvés), j'ai donc effectué les étapes suivantes qui ont été recommandées par @Arpit mais avec de légères modifications:

Assurez-vous d'abord de supprimer tous les paramètres de proxy précédents:

git config --global --unset http.proxy

2.Ensuite, listez et obtenez le contenu de gitconfig

git config --list --show-origin

3.Dernière mise à jour du contenu du fichier gitconfig comme ci-dessous:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:[email protected]:8080
sslverify = false
[https]
proxy = http://proxyuser:[email protected]:8080
sslverify = false
Wael Almadhoun
la source
3

J'ai essayé toutes les réponses ci-dessus et rien n'a fonctionné pour moi, car il y avait un problème d'encodage de mot de passe proxy.

Cette commande a fonctionné:

git config --global http.proxy http://[email protected]:PortNumber 

N'entrez pas le mot de passe dans votre commande. Il vous demandera dynamiquement lorsque vous essayez de vous connecter à n'importe quel dépôt git.

Ishtdeep Hora
la source
Merci, cela a fonctionné pour moi. Bien que le paramètre de configuration git devrait être http.proxy
ochhii
le nom d'utilisateur ne suffit pas. Mot de passe également requis.
Dinith
utilisez ce code {git config --global http.proxy proxyuser: [email protected]: 8080 }
Dinith
2

Pour les utilisateurs de Windows: si git configou set http_proxy=ne fonctionne pas, cette réponse peut aider:

remplacer le git://protocole du dépôt git par http://. Notez que vous devrez de http_proxytoute façon définir le premier.

DomTomCat
la source
0

Après avoir inlassablement essayé toutes les solutions de cette page, mon travail a consisté à utiliser la clé SSH à la place!

  1. Ouvrez Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Ouvrez votre fournisseur Git (Github, Bitbucket, etc.)
  4. Ajoutez une copie du contenu du fichier id_rsa.pub dans la page d'entrée du fournisseur Git (vérifiez votre profil)
Janac Meena
la source