Comment extraire d'un référentiel Git via un proxy HTTP?

491

Remarque: alors que le cas d'utilisation décrit concerne l'utilisation de sous-modules dans un projet, il en va de même pour une normale git cloned'un référentiel via HTTP.

J'ai un projet sous contrôle Git. Je voudrais ajouter un sous-module:

git submodule add http://github.com/jscruggs/metric_fu.git vendor/plugins/metric_fu

Mais je reçois

...
got 1b0313f016d98e556396c91d08127c59722762d0
got 4c42d44a9221209293e5f3eb7e662a1571b09421
got b0d6414e3ca5c2fb4b95b7712c7edbf7d2becac7
error: Unable to find abc07fcf79aebed56497e3894c6c3c06046f913a under http://github.com/jscruggs/metri...
Cannot obtain needed commit abc07fcf79aebed56497e3894c6c3c06046f913a
while processing commit ee576543b3a0820cc966cc10cc41e6ffb3415658.
fatal: Fetch failed.
Clone of 'http://github.com/jscruggs/metric_fu.git' into submodule path 'vendor/plugins/metric_fu'

J'ai mon HTTP_PROXY configuré:

c:\project> echo %HTTP_PROXY%
http://proxy.mycompany:80

J'ai même un paramètre Git global pour le proxy http:

c:\project> git config --get http.proxy
http://proxy.mycompany:80

Quelqu'un a-t-il obtenu des récupérations HTTP pour fonctionner de manière cohérente via un proxy? Ce qui est vraiment étrange, c'est que quelques projets sur GitHub fonctionnent bien ( awesome_nested_setpar exemple), mais d'autres échouent régulièrement ( rails par exemple).

James A. Rosen
la source
Votre proxy pourrait-il censurer certains mots ou quelque chose, affectant ainsi uniquement les dépôts où ces mots apparaissent dans le flux d'octets?
pjz
8
doublon possible de Faire fonctionner git avec un serveur proxy
alvaro
4
@alvaro, je pense que vous voulez dire que faire fonctionner Git avec un serveur proxy est un double possible de cette question. Cette question est plus ancienne que celle à laquelle vous vous référez.
Derek Mahar
2
@James, votre paramètre Git "global" pour le serveur proxy n'est pas réellement global, mais local. Pour être global, vous devez fournir un argument --globalà git config.
Derek Mahar
1
@DerekMahar Les questions plus anciennes peuvent être fermées de doublons de questions plus récentes, si la question plus récente est de meilleure qualité (ou plus généralement applicable).
Raedwald

Réponses:

584

Vous pouvez également définir le proxy HTTP que Git utilise dans la propriété de configuration globale http.proxy:

git config --global http.proxy http://proxy.mycompany:80

Pour vous authentifier avec le proxy:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080/

( Nous remercions @EugeneKulabuhov et @JaimeReynoso pour le format d'authentification.)

Derek Mahar
la source
8
Cela a fonctionné pour moi: définir HTTP_PROXY dans l'environnement pour l'utilisateur (sous Windows), puis le commentaire ci-dessus avec $ HTTP_PROXY (en majuscules). +1 pour cette solution.
Sean Aitken
4
CleverCoder, sous Windows, vous devez spécifier% HTTP_PROXY%, pas $ HTTP_PROXY (sauf si vous exécutez Cygwin, bien sûr). Je vais modifier ma réponse pour travailler dans Windows au lieu d'un environnement Unix.
Derek Mahar
7
où dois-je mettre le nom d'utilisateur et le mot de passe pour le proxy?
Duna
26
Utilisez la git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080syntaxe pour fournir le nom d'utilisateur / mot de passe
Eugene Kulabuhov
2
Pour tous ceux qui pourraient avoir des problèmes avec le proxy, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / a fonctionné pour moi
Jaime Reynoso
146

Il y a déjà d'excellentes réponses à ce sujet. Cependant, je pensais que j'allais intervenir car certains serveurs proxy nécessitent que vous vous authentifiiez avec un ID utilisateur et un mot de passe. Parfois, cela peut être sur un domaine.

Ainsi, par exemple, si la configuration de votre serveur proxy est la suivante:

Server: myproxyserver
Port: 8080
Username: mydomain\myusername
Password: mypassword

Ajoutez ensuite à votre .gitconfigfichier à l'aide de la commande suivante:

git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080

Ne t'inquiète pas https. Tant que le serveur proxy spécifié prend en charge http et https, une seule entrée dans le fichier de configuration suffit.

Vous pouvez ensuite vérifier que la commande a .gitconfigcorrectement ajouté l'entrée à votre fichier en procédant comme suit cat .gitconfig:

À la fin du fichier, vous verrez une entrée comme suit:

[http]
    proxy = http://mydomain\\myusername:mypassword@myproxyserver:8080

C'est ça!

Max MacLeod
la source
Intéressant. Je peux accéder à la partie "Résolution des deltas" avec 100%, mais il semble que le processus de clonage se bloque. Quelqu'un a vécu ça?
Roman
1
+1. Et bientôt, vous pourrez configurer un proxy par URL!
VonC
@apoplexy pouvez-vous commenter votre modification suggérée s'il vous plaît afin que je puisse considérer
Max MacLeod
3
Si vous avez un symbole @ dans votre nom d'utilisateur ou votre mot de passe, vous pouvez l'encoder par URL %40et cela fonctionnera.
Adarsha
3
Au lieu de cat .gitconfig, vous pouvez lister les paramètres de configuration avec git config --list
user3969377
125

Ce qui a finalement fonctionné était de définir la http_proxyvariable d'environnement. J'avais réglé HTTP_PROXYcorrectement, mais git aime mieux la version minuscule.

James A. Rosen
la source
3
Le paramétrage http.proxydans la configuration globale de Git fonctionne-t-il? Dans votre question, vous définissez http.proxydans la configuration du référentiel local.
Derek Mahar
22
Dans mon cas, j'ai dû régler lehttps_proxy
M Smith
1
https.proxysemblait fonctionner pour moi car j'utilisais https sur github
Shervin Asgari
3
@MSmith Si vous deviez définir https_proxycela signifie que vous n'utilisiez httpspas la httpquestion à propos de laquelle.
Piotr Dobrogost
3
Curl et libcurl ne reconnaissent pas les majuscules HTTP_PROXY et HTTPS_PROXY. Voir ce lien pour plus d'informations: curl.haxx.se/mail/archive-2001-12/0034.html
Doug
49

Il semble que vous utilisez une compilation mingw de Git sur Windows (ou peut-être une autre dont je n'ai pas entendu parler). Il existe des moyens de déboguer ceci: je crois que tout le travail du proxy http pour git est fait par curl. Définissez cette variable d'environnement avant d'exécuter git:

GIT_CURL_VERBOSE=1

Cela devrait au moins vous donner une idée de ce qui se passe dans les coulisses.

sethbc
la source
7
Lorsque j'ajoute cette variable d'environnement, msysgit n'imprime rien de plus. :(
Andrew Arnott
Après avoir combattu avec des mandataires pendant un certain temps, cette astuce m'a aidé à découvrir que la base de données de curl cert était manquante / foirée, et c'est pourquoi les demandes ont échoué.
davenpcj
Je le cherche depuis un certain temps maintenant. Merci.
M Smith
40

Si vous souhaitez simplement utiliser un proxy sur un référentiel spécifié, vous n'en avez pas besoin sur d'autres référentiels. La manière préférable est l' -c, --config <key=value>option lorsque vous êtes git cloneun référentiel. par exemple

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"
alijandro
la source
C'est étrange, j'ai essayé de définir $ http_proxy, mais git ne l'a pas respecté. On dirait qu'il ne se soucie que de sa propre configuration ...
weberc2
Travaux. Vous pouvez également spécifier --configplusieurs fois, par exemple lorsque vous souhaitez également définir https.proxy.
barfuin
Merci! Exactement ce que je cherchais
Boyang
2
cloner avec la configuration du proxy mais sans changer la configuration du proxy de l'utilisateur. Exactement ce dont j'ai besoin! THX.
Doom
26

Lorsque votre équipe réseau effectue une inspection ssl en réécrivant les certificats, puis en utilisant une URL http au lieu d'une URL https, combinée avec la définition de cette var, cela a fonctionné pour moi.

git config --global http.proxy http://proxy:8081
bbaassssiiee
la source
2
Vous pouvez également l'ajouter à l'environnement pour accepter les certificats réécrits que les mecs du réseau proposent pour inspecter votre trafic: export GIT_SSL_NO_VERIFY = true
bbaassssiiee
A parfaitement fonctionné pour moi. Merci. Je devais juste ajouter git config --global http.proxy proxy: 8081 git config --global https.proxy proxy: 8081
Sid
solution simple et rapide, +1 pour cette réponse.
WALKER
1
Merci à @sethbc, @datasmid! J'avais besoin de GIT_CURL_VERBOSE = 1 pour déboguer et GIT_SSL_NO_VERIFY = true pour ignorer la vérification.
Henry Rivera
ne travaille pas avec moi. même pas avec la var
GIT_SSL_NO_VERIFY
20

Vous pouvez également modifier le fichier .gitconfig situé dans le répertoire% userprofile% sur le système Windows ( bloc-notes% userprofile% .gitconfig ) ou dans le répertoire ~ sur le système Linux ( vi ~ / .gitconfig ) et ajouter une section http comme ci-dessous.

Contenu du fichier .gitconfig:

[http]
        proxy = http://proxy.mycompany:80
STB Land
la source
20

Pour moi, git: // ne fonctionne tout simplement pas via le proxy, bien que https: // le fasse. Cela a causé quelques maux de tête parce que j'exécutais des scripts qui utilisaient tous git: // donc je ne pouvais pas tout simplement les changer tous. Cependant j'ai trouvé ce GEM

git config --global url."https://github.com/".insteadOf git://github.com/
TonyT_32909023190
la source
Merci, cela a beaucoup aidé
dgrat
Je sais que j'ai également eu des problèmes pour sortir de git: //. Avez-vous envisagé un problème clé SSH? Mon problème était dû à une mauvaise configuration de clé SSH.
avazula
17

Il s'agit d'une ancienne question, mais si vous êtes sous Windows, pensez à définir HTTPS_PROXY également si vous effectuez une récupération via une URL https. A travaillé pour moi!

Benjamin Wootton
la source
2
Il suffisait de définir https_proxyla variable d'environnement seule (aucun ensemble d'options git global ou repo proxy) dans mon cas (msysgit sous Windows XP).
Piotr Dobrogost
13

Je ne trouve ni http.proxyne GIT_PROXY_COMMANDtravaille pour mon proxy http authentifié. Le proxy n'est déclenché d'aucune façon. Mais je trouve un moyen de contourner cela.

  1. Installez le tire - bouchon ou d'autres alternatives que vous souhaitez.
  2. Créez un fichier d'authentification. Le format pour authfileest:, user_name:passwordet user_name, passwordest votre nom d'utilisateur et votre mot de passe pour accéder à votre proxy. Pour créer le fichier une telle commande simplement courir comme ceci: echo "username:password" > ~/.ssh/authfile.

  3. Modifiez ~/.ssh/configet assurez-vous que son autorisation est 644:chmod 644 ~/.ssh/config

Prenez github.com comme exemple, ajoutez les lignes suivantes à ~/.ssh/config:

Host    github.com
        HostName        github.com
        ProxyCommand    /usr/local/bin/corkscrew <your.proxy> <proxy port> %h %p <path/to/authfile>
        User            git

Désormais, chaque fois que vous faites quoi que ce soit [email protected], il utilise automatiquement le proxy. Vous pouvez facilement faire la même chose avec Bitbucket également.

Ce n'est pas aussi élégant que les autres approches, mais cela fonctionne comme un charme.

Carlosin
la source
1
Pouvez-vous expliquer plus en détail l'étape 2, "créer un fichier d'authentification"? Il semble que votre approche soit la seule qui fonctionnera pour git: // urls.
nik
@NikBagdon J'ai ajouté plus de détails à l'étape 2. Faites-moi savoir s'il y a quelque chose de flou :)
Carlosin
11

Sous Windows, si vous ne souhaitez pas mettre votre mot de passe dans .gitconfig en texte brut, vous pouvez utiliser

Il vous authentifie par rapport au proxy normal ou même Windows NTLM et démarre localhost-proxy sans authentification.

Pour le faire fonctionner:

  • Installer Cntml
  • Configurez Cntml selon la documentation pour passer votre authentification proxy
  • Pointez git vers votre nouveau proxy localhost:

    [http]
        proxy = http://localhost:3128       # change port as necessary
    
Boris Brodski
la source
2
Pour ce que ça vaut, cela aurait dû être la réponse acceptée, il est sur Windows. Il n'y a pas de proxy transparent (sinon il n'y aurait pas de problème.
booyaa
9

Pour moi, cela a fonctionné:

sudo apt-get install socat

Créez un fichier dans votre $ BIN_PATH / gitproxy avec:

#!/bin/sh 
_proxy=192.168.192.1 
_proxyport=3128 
exec socat STDIO PROXY:$_proxy:$1:$2,proxyport=$_proxyport

N'oubliez pas de lui donner des autorisations d'exécution

chmod a+x gitproxy

Exécutez les commandes suivantes pour configurer l'environnement:

export PATH=$BIN_PATH:$PATH
git config --global core.gitproxy gitproxy
Lesswire
la source
1
Lien vers une explication et un lien vers un résumé avec des mises à jour du (mini) script: emilsit.net/blog/archives/…
Karl Richter
Cette réponse est la seule qui fonctionne pour git://les URL de protocole, pour les serveurs git (rares) qui ne prennent pas en charge https. Fonctionne également sur Windows, avec un fichier de commandes approprié et socat pour Windows.
davenpcj
8

Configurer le proxy pour git

commander

git config --global http.proxy http://user:password@domain:port

exemple

git config --global http.proxy http://clairton:[email protected]:8080
Clairton Luz
la source
7

Définissez Git credential.helper sur wincred.

git config --global credential.helper wincred

Assurez-vous qu'il n'y a qu'un seul identifiant.

git config -l

S'il y en a plus d'un et qu'il n'est pas réglé sur wincred, supprimez-le.

git config --system --unset credential.helper

Définissez maintenant le proxy sans mot de passe.

git config --global http.proxy http://<YOUR WIN LOGIN NAME>@proxy:80

Vérifiez que tous les paramètres que vous avez ajoutés sont corrects ....

git config --global -l

Maintenant vous êtes prêt à partir!

Thor88
la source
6

J'ai eu le même problème, avec un correctif légèrement différent: RECONSTRUIRE GIT AVEC SUPPORT HTTP

Le git:protocole n'a pas fonctionné via mon pare-feu d'entreprise.

Par exemple, cela a expiré:

git clone git://github.com/miksago/node-websocket-server.git

curl github.comfonctionne très bien, donc je sais que ma http_proxyvariable d'environnement est correcte.

J'ai essayé d'utiliser http, comme ci-dessous, mais j'ai obtenu une erreur immédiate.

git clone http://github.com/miksago/node-websocket-server.git

->>>  fatal: Unable to find remote helper for 'http' <<<-

J'ai essayé de recompiler git comme ceci:

./configure  --with-curl --with-expat

mais toujours eu l'erreur fatale.

Enfin, après plusieurs heures frustrantes, j'ai lu le fichier de configuration et j'ai vu ceci:

# Définissez CURLDIR = / foo / bar si votre en-tête curl et vos fichiers de bibliothèque sont

# / foo / bar / include et / foo / bar / lib répertoires.

Je me suis alors rappelé que je ne m'étais pas conformé curlà la source, et je suis donc allé chercher les fichiers d'en-tête. Effectivement, ils n'étaient pas installés. C'était ça le problème. Make ne s'est pas plaint des fichiers d'en-tête manquants. Je ne savais donc pas que l' --with-curloption ne faisait rien (c'est en fait la valeur par défaut dans ma version de git).

J'ai fait ce qui suit pour le réparer:

  1. Ajout des en-têtes nécessaires pour make:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Supprimé gitde /usr/local(car je veux que la nouvelle installation y vive).

    J'ai simplement retiré git*de /usr/local/shareet/usr/local/libexec

  3. Recherché les comprennent dirs contenant les curlet expatfichiers en- tête, puis (parce que j'avais lu par configure) ajouté ce à l'environnement comme ceci:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Ran configureavec les options suivantes, qui, encore une fois, ont été décrites dans le configurefichier lui-même, et étaient également les valeurs par défaut, mais que diable:

    ./configure  --with-curl --with-expat
    
  5. Et httpfonctionne maintenant avec gitmon pare-feu d'entreprise:

    git clone http://github.com/miksago/node-websocket-server.git
    Cloning into 'node-websocket-server'...
    * Couldn't find host github.com in the .netrc file, using defaults
    * About to connect() to proxy proxy.entp.attws.com port 8080
    *   Trying 135.214.40.30... * connected
    ...
    
steve98177
la source
Je suis content que vous ayez proposé celui-ci, je ne savais pas que le protocole git n'était pas géré sur mon proxy squid
rupert160
5

Cela a fonctionné pour moi.

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port
Vagner Nogueira
la source
3

vous pouvez utiliser:

git config --add http.proxy http://user:password@proxy_host:proxy_port
Montells
la source
2

Pour les fenêtres

Goto -> C: / Users / nom_utilisateur / gitconfig

Mettre à jour le fichier gitconfig avec les détails ci-dessous

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

Comment vérifier votre proxy et votre numéro de port?

Internet Explorer -> Paramètres -> Options Internet -> Connexions -> Paramètres LAN

Écolier
la source
2

La méthode ci-dessous fonctionne pour moi:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Remarque Zsh: modifiez votre fichier ~ / .zshenv au lieu de ~ / .bash_profile.
  • Remarque sur Ubuntu et Fedora: modifiez votre fichier ~ / .bashrc au lieu de ~ / .bash_profile.
Nguyen Van Duc
la source
2

A noter: la plupart des exemples sur le net montrent des exemples comme

git config --global http.proxy proxy_user:proxy_passwd@proxy_ip:proxy_port

Il semble donc que - si votre proxy a besoin d'une authentification - vous devez laisser votre mot de passe d'entreprise dans la configuration git. Ce qui n'est pas vraiment cool.

Mais, si vous configurez simplement l'utilisateur sans mot de passe:

git config --global http.proxy proxy_user@proxy_ip:proxy_port

Git semble (au moins sur ma machine Windows sans aide d'identification) reconnaître cela et demande le mot de passe proxy sur l'accès repo.

gratinier
la source
Vous êtes mon homme, car le nom d'utilisateur et le mot de passe de ma société sso ont tellement de simboles spéciales qui étaient assez impossibles à coder et à passer. Avec cet "escamotage", j'ai pu fournir le mot de passe sur la face du clone ou toute autre étape suivante après avoir défini l'adresse proxy.
Carmine Tambascia
1

Ce n'est pas un problème avec votre proxy. C'est un problème avec github (ou git). Cela échoue aussi pour moi sur git-1.6.0.1 sur linux. Un bug est déjà signalé (par vous pas moins).

Assurez-vous de supprimer vos pâtés, ils sont déjà sur Google. Edit: J'ai dû rêver, je suppose que vous ne pouvez pas les supprimer. Utilisez Gist à la place?

sethbc
la source
J'ai également posté sur github et msysGit car je ne savais pas où était le problème. Je n'arrive pas à supprimer les pâtés, malheureusement.
James A. Rosen,
1

Les réponses ci-dessus ont fonctionné pour moi lorsque mon proxy n'a pas besoin d'authentification. Si vous utilisez un proxy qui vous oblige à vous authentifier, vous pouvez essayer CCProxy. J'ai un petit tutoriel sur la façon de le configurer ici,

http://blog.praveenkumar.co.in/2012/09/proxy-free-windows-xp78-and-mobiles.html

J'ai pu pousser, tirer, créer de nouveaux dépôts. Tout fonctionnait très bien. Assurez-vous de faire une désinstallation propre et de réinstaller la nouvelle version si vous rencontrez des problèmes avec Git comme je l'ai fait.

Praveen
la source
1

comme @ user2188765 l'a déjà souligné, essayez de remplacer le git://protocole du référentiel par http[s]://. Voir aussi cette réponse

DomTomCat
la source
0

J'ai contourné le proxy en utilisant https ... certains proxys ne vérifient même pas https.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\git\meantest>git clone http://github.com/linnovate/mean.git
Cloning into 'mean'...
fatal: unable to access 'http://github.com/linnovate/mean.git/': Failed connect
to github.com:80; No error

c:\git\meantest>git clone https://github.com/linnovate/mean.git
Cloning into 'mean'...
remote: Reusing existing pack: 2587, done.
remote: Counting objects: 27, done.
remote: Compressing objects: 100% (24/24), done.
rRemote: Total 2614 (delta 3), reused 4 (delta 0)eceiving objects:  98% (2562/26

Receiving objects: 100% (2614/2614), 1.76 MiB | 305.00 KiB/s, done.
Resolving deltas: 100% (1166/1166), done.
Checking connectivity... done
Robert Koch
la source
0

Comme cela a été répondu par beaucoup, mais c'est juste pour Winodws USER qui est derrière le proxy avec authentification.

Réinstallation (premier échec, ne pas supprimer).

Goto ->
**Windows**
1. msysgit\installer-tmp\etc\gitconfig
    Under [http]
        proxy = http://user:pass@url:port

**Linux**
1. msysgit\installer-tmp\setup-msysgit.sh
      export HTTP_PROXY="http://USER:[email protected]:8080"

si vous avez un caractère spécial dans user / pass, utilisez url_encode

Ravi Parekh
la source