Come estraggo da un repository Git tramite un proxy HTTP?


491

Nota: mentre il caso d'uso descritto riguarda l'uso dei sottomoduli all'interno di un progetto, lo stesso vale per un normale git clonerepository su HTTP.

Ho un progetto sotto il controllo di Git. Vorrei aggiungere un sottomodulo:

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

Ma capisco

...
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'

Ho configurato il mio HTTP_PROXY:

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

Ho anche un'impostazione Git globale per il proxy http:

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

Qualcuno ha ottenuto i recuperi HTTP per funzionare costantemente attraverso un proxy? La cosa davvero strana è che alcuni progetti su GitHub funzionano bene ( awesome_nested_setad esempio), ma altri falliscono costantemente ( ad esempio i binari ).


Il tuo proxy potrebbe censurare alcune parole o qualcosa, influenzando in tal modo solo quei repository in cui quelle parole compaiono come parte del flusso di byte?
pjz,


4
@alvaro, penso che intendi dire che far funzionare git con un server proxy è un possibile duplicato di questa domanda. Questa domanda è più vecchia di quella a cui ti riferisci.
Derek Mahar, l'

2
@James, l'impostazione Git "globale" per il server proxy non è in realtà globale, ma locale. Per essere globale, devi fornire argomenti --globala git config.
Derek Mahar,

1
@DerekMahar Le domande più vecchie possono essere chiuse da duplicati di domande più recenti, se la domanda più recente è di qualità migliore (o più generalmente applicabile).
Raedwald,

Risposte:


584

Puoi anche impostare il proxy HTTP che Git utilizza nella proprietà di configurazione globale http.proxy:

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

Per autenticarsi con il proxy:

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

(Il merito va a @EugeneKulabuhov e @JaimeReynoso per il formato di autenticazione.)


8
Questo ha funzionato per me: imposta HTTP_PROXY in ambiente per l'utente (su Windows), quindi il commento sopra con $ HTTP_PROXY (maiuscolo). +1 per questa soluzione.
Sean Aitken,

4
CleverCoder, su Windows, devi specificare% HTTP_PROXY%, non $ HTTP_PROXY (a meno che tu non stia eseguendo Cygwin, ovviamente). Modificherò la mia risposta per lavorare in Windows anziché in ambiente Unix.
Derek Mahar,

7
dove inserisco username e password per proxy?
Duna,

26
Usa la git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080sintassi per fornire nome utente / password
Eugene Kulabuhov,

2
Per chiunque abbia problemi con il proxy, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / ha funzionato per me
Jaime Reynoso

146

Ci sono già ottime risposte su questo. Tuttavia, ho pensato di fare il chip in quanto alcuni server proxy richiedono l'autenticazione con ID utente e password. A volte questo può essere su un dominio.

Ad esempio, se la configurazione del server proxy è la seguente:

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

Quindi, aggiungi al tuo .gitconfigfile usando il seguente comando:

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

Non ti preoccupare https. Finché il server proxy specificato supporta http e https, sarà sufficiente una voce nel file di configurazione.

È quindi possibile verificare che il comando abbia aggiunto .gitconfigcorrettamente la voce al file effettuando cat .gitconfig:

Alla fine del file vedrai una voce come segue:

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

Questo è tutto!


Interessante. Sono in grado di raggiungere la parte "Risoluzione dei delta" con il 100%, ma sembra che il processo di clonazione si blocchi. Qualcuno l'ha provato?
Romano

1
+1. E presto, sarai in grado di configurare il proxy per url!
VonC,

@apoplexy puoi commentare la modifica suggerita per favore, così posso prendere in considerazione
Max MacLeod

3
Se hai il simbolo @ nel tuo nome utente o password, puoi codificarlo tramite URL %40e funzionerà.
Adarsha,

3
Invece di cat .gitconfig, puoi elencare le impostazioni di configurazione con git config --list
user3969377

125

Ciò che alla fine ha funzionato è stato impostare la http_proxyvariabile d'ambiente. Avevo impostato HTTP_PROXYcorrettamente, ma a quanto pare git preferisce la versione minuscola.


3
L'impostazione http.proxynella configurazione globale di Git funziona? Nella tua domanda, hai impostato http.proxyla configurazione del repository locale.
Derek Mahar,

22
Nel mio caso ho dovuto impostare ilhttps_proxy
M Smith il

1
https.proxysembrava funzionare per me mentre stavo usando https su github
Shervin Asgari

3
@MSmith Se è stato necessario impostare https_proxyquesto mezzo si stava utilizzando httpsnon http, che domanda è di circa.
Piotr Dobrogost,

3
Curl e libcurl non riconoscono HTTP_PROXY maiuscolo e HTTPS_PROXY. Vedi questo link per maggiori informazioni: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Sembra che tu stia usando una compilation mingw di Git su Windows (o forse un altro di cui non ho sentito parlare). Esistono modi per eseguire il debug di questo: credo che tutto il lavoro del proxy http per git sia svolto da curl. Impostare questa variabile d'ambiente prima di eseguire git:

GIT_CURL_VERBOSE=1

Questo dovrebbe almeno darti un'idea di cosa sta succedendo dietro le quinte.


7
Quando aggiungo questa variabile d'ambiente, msysgit non stampa nulla in più. :(
Andrew Arnott,

dopo aver combattuto con i proxy per un po 'di tempo, questo suggerimento mi ha aiutato a scoprire che il database cert di curl era mancante / incasinato, e questo è il motivo per cui le richieste fallivano.
davenpcj,

Lo cerco da un po 'di tempo ormai. Grazie.
M Smith,

40

Se si desidera solo utilizzare il proxy su un repository specificato, non è necessario su altri repository. Il modo preferibile è l' -c, --config <key=value>opzione quando si è git cloneun repository. per esempio

$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git --config "http.proxy=proxyHost:proxyPort"

Questo è strano, ho provato a impostare $ http_proxy, ma git non lo ha rispettato. Sembra che si preoccupi solo della propria configurazione ...
weberc2,

Lavori. È inoltre possibile specificare --configpiù volte, ad esempio quando si desidera impostare anche https.proxy.
Barfuin,

Grazie! Esattamente quello che stavo cercando
Boyang

2
clonare con la configurazione proxy ma senza modificare la configurazione proxy dell'utente. Esattamente quello che mi serve! Grazie.
doom

26

Quando il tuo team di rete esegue l'ispezione ssl riscrivendo i certificati, quindi utilizzando un URL http anziché uno https, combinato con l'impostazione di questo var ha funzionato per me.

git config --global http.proxy http://proxy:8081

2
Puoi anche aggiungerlo all'ambiente per accettare i certificati riscritti offerti dalla rete per ispezionare il tuo traffico: export GIT_SSL_NO_VERIFY = true
bbaassssiiee

Ha funzionato perfettamente per me. Grazie. Ho appena dovuto aggiungere git config - proxy proxy http http : 8081 git config - proxy
Sid

soluzione semplice e veloce, +1 per questa risposta.
WALKER,

1
Grazie a @sethbc, @datasmid! Avevo bisogno di GIT_CURL_VERBOSE = 1 per il debug e GIT_SSL_NO_VERIFY = true per saltare la verifica.
Henry Rivera,

non lavorare con me. nemmeno con GIT_SSL_NO_VERIFY var
keinabel

20

Potresti anche modificare il file .gitconfig che si trova nella directory% userprofile% sul sistema Windows ( blocco note% userprofile% .gitconfig ) o nella directory ~ sul sistema Linux ( vi ~ / .gitconfig ) e aggiungere una sezione http come di seguito.

Contenuto del file .gitconfig:

[http]
        proxy = http://proxy.mycompany:80

20

Per me il git: // semplicemente non funziona attraverso il proxy sebbene https: // funzioni. Ciò ha causato un po 'di mal di testa perché stavo eseguendo script che tutti usavano git: // quindi non potevo semplicemente cambiarli tutti. Comunque ho trovato questo GEM

git config --global url."https://github.com/".insteadOf git://github.com/

Grazie, questo mi ha aiutato molto
dgrat

So che ho anche avuto problemi a tirare da Git: //. Hai considerato un problema con la chiave SSH? Il mio problema era dovuto a una configurazione della chiave SSH errata.
avazula,

17

Questa è una vecchia domanda, ma se sei su Windows, considera di impostare anche HTTPS_PROXY se stai recuperando tramite un URL https. Ha funzionato per me!


2
https_proxyNel mio caso è stato sufficiente impostare la sola variabile d'ambiente (nessuna opzione di git global o repo proxy set) nel mio caso (msysgit su Windows XP).
Piotr Dobrogost,

13

Non trovo http.proxyGIT_PROXY_COMMANDlavoro per il mio proxy HTTP autenticato. Il proxy non viene attivato in alcun modo. Ma trovo un modo per aggirare questo.

  1. Installa il cavatappi o altre alternative che desideri.
  2. Crea un file di autenticazione. Il formato per authfileè:, user_name:passworde user_name, passwordè il nome utente e la password per accedere al proxy. Per creare un tale file, è sufficiente eseguire il comando in questo modo: echo "username:password" > ~/.ssh/authfile.

  3. Modifica ~/.ssh/confige assicurati che l'autorizzazione sia 644:chmod 644 ~/.ssh/config

Prendi github.com come esempio, aggiungi le seguenti righe a ~/.ssh/config:

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

Ora ogni volta che fai qualcosa con git@github.com, utilizzerà automaticamente il proxy. Puoi facilmente fare la stessa cosa anche con Bitbucket .

Questo non è così elegante come altri approcci, ma funziona come un fascino.


1
Potete per favore approfondire il passaggio 2, "creare un file di autenticazione"? Sembra che il tuo approccio sia l'unico che funzionerà con git: // urls.
nik,

@NikBagdon Ho aggiunto ulteriori dettagli al passaggio 2. Fammi sapere se c'è qualcosa di poco chiaro :)
Carlosin

11

Su Windows, se non si desidera inserire la password in .gitconfig nel testo normale, è possibile utilizzare

Ti autentica rispetto al proxy NTLM normale o persino a Windows e avvia il proxy localhost senza autenticazione.

Per farlo funzionare:

  • Installa Cntml
  • Configurare Cntml in base alla documentazione per passare l'autenticazione proxy
  • Punta git al tuo nuovo proxy localhost:

    [http]
        proxy = http://localhost:3128       # change port as necessary
    

2
Per quello che vale, questa avrebbe dovuto essere la risposta accettata, è su Windows. Non esiste un proxy trasparente (altrimenti non ci sarebbe un problema.
Booyaa,

9

Per me quello che ha funzionato è stato:

sudo apt-get install socat

Crea un file nel tuo $ BIN_PATH / gitproxy con:

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

Non dimenticare di dargli le autorizzazioni per l'esecuzione

chmod a+x gitproxy

Esegui i seguenti comandi per configurare l'ambiente:

export PATH=$BIN_PATH:$PATH
git config --global core.gitproxy gitproxy

1
Collegamento a una spiegazione e collegamento a un riassunto con aggiornamenti al (mini-) script: emilsit.net/blog/archives/…
Karl Richter,

Questa risposta è l'unica che funziona per gli git://URL di protocollo, per quei (rari) server git che non supportano https. Funziona anche su Windows, con un file batch appropriato e socat per Windows.
davenpcj,

8

Installa il proxy su git

comando

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

esempio

git config --global http.proxy http://clairton:123456@proxy.clairtonluz.com.br:8080

7

Impostare Git credential.helper su wincred.

git config --global credential.helper wincred

Assicurati che ci sia solo 1 credential.helper

git config -l

Se è presente più di 1 e non è impostato su Wincred, rimuoverlo.

git config --system --unset credential.helper

Ora imposta il proxy senza password.

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

Controlla che tutte le impostazioni che hai aggiunto abbiano un bell'aspetto ....

git config --global -l

Ora sei bravo ad andare!


6

Ho avuto lo stesso problema, con una soluzione leggermente diversa: REVISIONARE GIT CON SUPPORTO HTTP

Il git:protocollo non ha funzionato attraverso il mio firewall aziendale.

Ad esempio, questo è scaduto:

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

curl github.comfunziona bene, però, quindi so che la mia http_proxyvariabile d'ambiente è corretta.

Ho provato a utilizzare http, come di seguito, ma ho riscontrato un errore immediato.

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

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

Ho provato a ricompilare git in questo modo:

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

ma ho ancora ricevuto l'errore fatale.

Alla fine, dopo diverse ore frustranti, ho letto il file di configurazione e ho visto questo:

# Definisci CURLDIR = / foo / bar se sono presenti i file di intestazione e libreria di curl

# / foo / bar / include e / foo / bar / lib directory.

Mi sono poi ricordato che non avevo rispettato l' curlorigine e quindi sono andato alla ricerca dei file di intestazione. Abbastanza sicuro, non sono stati installati. Questo era il problema. Make non si è lamentato dei file di intestazione mancanti. Quindi non mi sono reso conto che l' --with-curlopzione non ha fatto nulla (è, in effetti, il valore predefinito nella mia versione digit ).

Ho fatto quanto segue per risolverlo:

  1. Aggiunte le intestazioni necessarie per make:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Rimosso gitda /usr/local(come voglio che la nuova installazione viva lì).

    Ho semplicemente rimosso git*da /usr/local/sharee/usr/local/libexec

  3. Ho cercato le directory include contenenti i file header curle expat, quindi (poiché avevo letto configure) le ho aggiunte all'ambiente in questo modo:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Funzionava configurecon le seguenti opzioni, che, ancora una volta, erano descritte nel configurefile stesso, ed erano anche le impostazioni predefinite, ma che diamine:

    ./configure  --with-curl --with-expat
    
  5. E ora httpfunziona con il gitmio firewall aziendale:

    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
    ...
    

Mi farebbe piacere che tu lo avessi proposto, non mi rendevo conto che il protocollo git non era stato gestito sul mio proxy squid
rupert160,


5

Questo ha funzionato per me.

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

3

Puoi usare:

git config --add http.proxy http://user:password@proxy_host:proxy_port


2

Per Windows

Vai a -> C: / Users / nome_utente / gitconfig

Aggiorna il file gitconfig con i dettagli di seguito

[Http]

[Https]

proxy = https://your_proxy:your_port

[Http]

proxy = http://your_proxy:your_port

Come controllare il proxy e il numero di porta?

Internet Explorer -> Impostazioni -> Opzioni Internet -> Connessioni -> Impostazioni LAN


2

Il metodo seguente funziona per me:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Nota Zsh: modifica il tuo file ~ / .zshenv invece di ~ / .bash_profile.
  • Nota Ubuntu e Fedora: modifica il tuo file ~ / .bashrc invece di ~ / .bash_profile.

2

Vale la pena ricordare: la maggior parte degli esempi in rete mostrano esempi come

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

Quindi sembra che, se il tuo proxy necessita di autenticazione, devi farlo lasciare la password della tua azienda in git-config. Il che non è molto bello.

Ma, se hai appena configurato l'utente senza password:

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

Git sembra (almeno sulla mia macchina Windows senza supporto credenziali) riconoscerlo e richiede la password proxy all'accesso repo.


Tu sei il mio uomo, dato che il nome utente e la password della mia compagnia hanno così tanti simboli speciali che era abbastanza impossibile da codificare e superare. Con questo "escamotage" sono stato in grado di fornire la password sulla faccia del clone o qualsiasi altro passaggio successivo dopo aver impostato l'indirizzo proxy.
Carmine Tambascia,

1

Questo non è un problema con il tuo proxy. È un problema con github (o git). Fallisce anche per me su git-1.6.0.1 su Linux. Il bug è già stato segnalato (da te non meno).

Assicurati di eliminare i tuoi pasticci, sono già su Google. Modifica: devo aver sognato, immagino che non puoi eliminarli. Usa invece Gist ?


Ho postato anche su github e msysGit in b / c non ero sicuro di dove fosse il problema. Sfortunatamente non riesco a cancellare i pasticci.
James A. Rosen,


1

Le risposte di cui sopra hanno funzionato per me quando il mio proxy non ha bisogno di autenticazione. Se si utilizza un proxy che richiede l'autenticazione, è possibile provare CCProxy. Ho un piccolo tutorial su come impostarlo qui,

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

Sono stato in grado di spingere, tirare, creare nuovi repository. Tutto ha funzionato bene. Assicurati di fare una disinstallazione pulita e reinstallare la nuova versione se stai affrontando problemi con Git come ho fatto io.


1

come @ user2188765 ha già sottolineato, provare a sostituire il git://protocollo del repository con http[s]://. Vedi anche questa risposta


0

Ho aggirato il proxy usando https ... alcuni proxy non controllano nemmeno 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

0

Dato che molti hanno risposto a questo, ma questo è solo per USER Winodws che è dietro proxy con autenticazione.

Reinstallazione (prima non riuscita, non rimuovere).

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:PASS@proxy.abc.com:8080"

se hai un carattere speciale in user / pass usa url_encode

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.