Far funzionare Git con un server proxy - fallisce con "Richiesta scaduta"


918

Come posso ottenere Git per utilizzare un server proxy?

Devo estrarre il codice da un server Git, ma mostra sempre "Richiesta scaduta". Come posso aggirare questo?

In alternativa, come posso impostare un server proxy?


Non sarebbe un elemento di configurazione client git? L'unico aspetto di ciò che sembra coinvolgere cmd.exe è che il client git potrebbe consentire di specificare un proxy in una variabile di ambiente.
Michael Burr,

Ho modificato la domanda originale per rimuovere tutti i riferimenti a Windows, poiché questo problema è di per sé specifico di GIT.
PlagueHammer,

3
Nota che sarai in grado di installare un proxy per git repo url!
VonC,


3
La maggior parte delle risposte a questa domanda riguarda i proxy HTTP. Se si dispone di un proxy SOCKS, vedere questa domanda per i protocolli HTTP / S e questa per il protocollo git: //.
utente

Risposte:


1634

Comando da usare:

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
  • passare proxyuserall'utente proxy
  • passare proxypwdalla password del proxy
  • passare proxy.server.comall'URL del server proxy
  • passare 8080alla porta proxy configurata sul server proxy

Si noti che questo funziona sia per i repository http che https.

Se decidi in qualsiasi momento di ripristinare questo proxy e di lavorare senza proxy:

Comando da usare:

git config --global --unset http.proxy

Infine, per controllare il proxy attualmente impostato:

git config --global --get http.proxy

15
Grazie Salim. Il mio ha funzionato senza proxyuser: proxypwd nell'URL.
Kwex,

11
Grazie ragazzi. Per me era l'autenticazione basata su NTLM e l'aggiornamento del mio .gitconfig non funzionava :(. Quindi ho dovuto ottenere CNTLM che utilizza l'autenticazione NTLM. Tutto quello che dovevo fare era indirizzare il mio CNTLM sul server proxy della mia rete e quindi puntare il mio software gestore degli aggiornamenti (come yum, apt-get o ssh) al proxy locale. In caso di operazioni git come il clone, pull il proxy http era il mio proxy configurato localmente con il server locale
Mayur Nagekar

9
Ciao, come posso impostare proxypass se ha il carattere "@"? So che devo scapeggiare questo personaggio ma non so come ... Grazie
patricK

13
@patricK Puoi usare %40un sostituto per la @stringa in username / password, anche se non l'ho provato io stesso. Spero che sia d'aiuto. :-)
Sourav Ghosh

14
@patricK Posso confermare che l'utilizzo di% 40 in sostituzione di @ works. Sembra che se un carattere speciale non funziona dovresti provare a codificarlo tramite URL. Le codifiche sono disponibili qui: w3schools.com/tags/ref_urlencode.asp
Jon

133

Questo ha funzionato per me, in Windows XP dietro un firewall aziendale.

Non ho dovuto installare alcun proxy locale o altro software oltre a git v1.771 da http://code.google.com/p/msysgit/downloads/list?can=3

$ git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/repoUser/repoName.git
$ git push origin master

proxyuser = l'utente proxy che mi è stato assegnato dal nostro reparto IT, nel mio caso è lo stesso utente di Windows che utilizzo per accedere al mio PC, l'utente di Active Directory

proxypwd = la password del mio utente proxy

proxy.server.com:8080 = il nome e la porta del proxy, l'ho ottenuto dal Pannello di controllo, Opzioni Internet, Connessioni, Pulsante Impostazioni LAN, Pulsante Avanzate nella sezione Server proxy, utilizzare il nome server e la porta nella prima riga (http) .

mygithubuser = l'utente che utilizzo per accedere a github.com

mygithubpwd = la password per il mio utente github.com

repoUser = il proprietario dell'utente del repository

repoName = il nome del repository


2
Evviva, grazie! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtpiù i certificati scaricati come descritto in simplicidade.org/notes/archives/2011/06/… (grazie a: stackoverflow.com/a/7206627/98528 ) lo ha fatto per me!
Akavel,

3
Sembra funzionare per me, ma git continua a non funzionare quando gli chiedo di clonare un repository usando il git://protocollo.
Ajedi32,

3
Un paio di chiarimenti alle informazioni di Pablolic, basate su ciò che ha funzionato per me: 1) Se proxyuser è un login di Windows, lascia fuori il dominio AD, includi semplicemente il nome utente senza il dominio; 2) Gli spazi nel proxypwd devono essere codificati come "+". ad es. "My Password" deve essere inserito come "My + Password".
Simon Tewsi,

2
@ EdmundYeung99: suggerirei di sostituire il simbolo @ con% 40. Non l'ho provato ma credo che sia la codifica URL standard.
Simon Tewsi,

2
@demongolem: sospetto che potresti aver bisogno di codificare l'URL della tua password (non l'ho provata, questa è solo un'ipotesi plausibile). Vedere la colonna UrlEncoded nella tabella nella seguente risposta: stackoverflow.com/a/11236038/216440 Nel tuo caso ciò significherebbe sostituire $ con% 24.
Simon Tewsi,

52

Impostare una variabile di sistema denominata http_proxycon il valore di ProxyServer:Port. Questa è la soluzione più semplice. Rispettivamente, usare https_proxycome daefu sottolineato nei commenti.

L'impostazione di gitproxy (come menziona sleske) è un'altra opzione, ma che richiede un "comando", che non è così semplice come la soluzione sopra.

Riferimenti: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html


10
Oppure usa 'https_proxy' se ti connetti a un repository https.
Daefu,

1
@daefu: non sono sicuro se è necessario impostare https_proxy. Sono collegato a un repository https e ho seguito il primo passo delle istruzioni di pablolic (cioè aggiungendo http.proxy al file di configurazione git). Questo è stato tutto quello che ci è voluto per me.
Simon Tewsi,

3
https_proxy è stato richiesto per me. L'impostazione di solo http_proxy non gli ha permesso di clonare un repository HTTPS
explunit

@daefu +1 funziona anche con le vedove github - domanda correlata: stackoverflow.com/questions/16216176/…
blue-sky

4
@SimonTewsi @explunit Durante l'impostazione delle variabili di ambiente http_proxyè necessario per gli URL HTTP ed https_proxyè richiesto per gli URL HTTPS. In alternativa, si potrebbe semplicemente impostare all_proxyper tutti gli URL. Vedere la ENVIRONMENTsezione in arricciatura (1) . Tuttavia, durante l'impostazione delle opzioni di git-config, http.proxyviene utilizzato per gli URL HTTP e HTTPS. Vedi http.proxyin git-config (1) .
Susam Pal,

43

Se il modo da riga di comando di configurare il tuo server proxy non funziona, probabilmente puoi semplicemente modificare .gitconfig (nella radice del tuo profilo, che può nascondere sia in C: \ Documents and Settings sia su alcune unità di rete) e aggiungere questo :

[http]
    proxy = http://username:password@proxy.at.your.org:8080

YMMV, tuttavia, copre solo il primo passaggio della configurazione della riga di comando. Potrebbe essere necessario modificare anche la configurazione di git di sistema e non ho idea di dove l'abbia nascosto.


1
"Potrebbe essere necessario modificare anche la configurazione di git di sistema". No, di solito no. Il sistema e la configurazione dell'utente sono combinati; l'impostazione del proxy in uno dei due dovrebbe essere sufficiente.
sleske,

Nel mio caso si trova sul mio computer Windows in [git home] \ etc \ gitconfig - dopo la modifica funziona come un incantesimo!
Barmaley Red Star

Ciò è particolarmente utile se alla riga di comando non piace la tua password a causa di caratteri speciali.
Origine

37

In alternativa all'utilizzo git config --global http.proxy address:port, è possibile impostare il proxy dalla riga di comando:

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

Il vantaggio è che il proxy non è impostato in modo persistente. Sotto Bash potresti impostare un alias:

alias git-proxy='git -c "http.proxy=address:port"'

22

Se stai usando Ubuntu, fai quanto segue ...

Passaggio 1: installare il cavatappi

$ sudo apt-get install corkscrew

Passaggio 2: scrivere uno script chiamato git-proxy.sh e aggiungere quanto segue

#!/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 $*

Passaggio 3: rendere eseguibile lo script

$ chmod +x git-proxy.sh

Passaggio 4: impostare il comando proxy per GIT impostando la variabile di ambiente

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

Ora usa i comandi git, come

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

Probabilmente dovresti usare "$@"invece di $*. Consulta il manuale della shell per maggiori dettagli.
Hynek -Pichi- Vychodil

15

Di fronte allo stesso problema a causa di più .gitconfigfile in Windows, segui i passaggi seguenti per risolvere lo stesso:

Passaggio 1: Apri Git BASH

Passaggio 2: cercare .gitconfig, eseguendo il comando seguente:

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

Passaggio 3: copia il contenuto seguente in .gitconfig:

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

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

Prova a mettere quanto segue nel file ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

1
Ho provato tutte le cose sopra. Solo quando ho aggiunto la voce https elencata qui sono stato in grado di lavorare.
Brent Fisher,

11

Per il protocollo git (git: // ...), installa socat e scrivi uno script come:

#!/bin/sh

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

rendilo eseguibile, mettilo nel tuo percorso e nel tuo ~/.gitconfigset core.gitproxycon il nome di quello script.


Funziona anche con Windows con SOCAT di Cygwin. utilizzandosocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj,

1
Può usare set GIT_PROXY_COMMAND=path\to\scriptper fare in modo che GIT usi il proxy senza fare confusione con git config.
davenpcj,

Sì! Finalmente il suggerimento giusto! Avevo anche bisogno dell'autenticazione: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Trovato qui: gist.github.com/sit/49288
Joachim

11

C'è qualcosa che ho notato e che voglio condividere qui:

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

Il metodo sopra non funzionerà per gli URL ssh (cioè, git@github.com:<user name>/<project name>.git):

git clone git@github.com:<user name>/<project name>.git // will not use the http proxy

E le cose non cambieranno se impostiamo SSH sulla porta HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ) perché cambia solo la porta (22 per impostazione predefinita ) a cui si connette la connessione ssh.

(Non un madrelingua inglese, si prega di affinare le mie parole se necessario)


7

Lavoro su Windows XP al lavoro (state / gov), quindi ho fatto le mie ricerche e l'ho trovato qui e ha funzionato per me. Spero che sia di aiuto :)

La variabile di ambiente http_proxy

Se si utilizza un server proxy o un firewall, potrebbe essere necessario impostare la variabile di ambiente http_proxy per accedere all'URL dalla riga di comando. Esempio: installazione di ppm per perl o applicazione di rpm in linux, aggiornamento di Ubuntu

Impostare la variabile http_proxy con il nome host o l'indirizzo IP del server proxy: http_proxy = http: // [proxy.example.org]

Se il server proxy richiede un nome utente e una password, includerli nel seguente formato: http_proxy = http: // [nome utente: password@proxy.example.org]

Se il server proxy utilizza una porta diversa da 80, includere il numero di porta: http_proxy = http: // [nome utente: password@proxy.example.org: 8080]

Windows XP

  1. Apri il Pannello di controllo e fai clic sull'icona Sistema.
  2. Nella scheda Avanzate, fare clic su Variabili d'ambiente.
  3. Fai clic su Nuovo nel pannello Variabili di sistema.
  4. Aggiungi http_proxy con le informazioni proxy appropriate (vedi esempi sopra).

Linux, Solaris o HP-UX

Imposta la variabile d'ambiente http_proxy usando il comando specifico per la tua shell (es. Set o export). Per rendere persistente questa modifica, aggiungere il comando al file di profilo appropriato per la shell. Ad esempio, in bash, aggiungi una riga come la seguente al tuo file .bash_profile o .bashrc:

  1. http_proxy = http: // [nome utente: password @ nome host: porta];
  2. esporta $ http_proxy

tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem

7

Oltre a queste risposte, ho trovato utile considerare questi 2 punti:

Potrebbe essere necessario applicare uno schema di autenticazione:

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

Inoltre, in genere con lo schema di autenticazione NTLM, potrebbe essere necessario fornire esplicitamente il dominio AD.

In git bash:

echo %userdomain%

E aggiorna il http.proxy di conseguenza:

git config --global http.proxy http://DOMAIN\\proxyuser:proxypwd@proxy.server.com:8080

Ad ogni modo, l'indagine può essere aiutata aggiungendo i log CURL:

export GIT_CURL_VERBOSE=1

Avevo bisogno di aggiungere proxyAuthMethod usando git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 non ha inviato alcuna autenticazione fino a quando non ho impostato questo parametro di configurazione.
Heatfan John

5

Se hai tsocks o proxychain installati e configurati, puoi farlo

$ tsocks git clone <you_repository>

o

$ proxychains git clone <you_repository>

per renderlo più breve, ho creato un collegamento simbolo /usr/bin/pper proxychains, quindi posso usarlo in questo modo

p git clone <you_repository>

e posso usarlo per delegare qualsiasi comando,

p <cmd-need-be-proxied>

a proposito, proxychains non viene aggiornato da molto tempo, potresti provare proxychians-ng


4

Impostazione del proxy git sul terminale

Se

  • non vuoi impostare manualmente il proxy per ciascuno dei tuoi progetti git, uno per uno
  • vuoi sempre usare lo stesso proxy per tutti i tuoi progetti

Impostalo globalmente una volta

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

se vuoi impostare il proxy per un solo progetto git (potrebbero esserci alcune situazioni in cui potresti non voler usare lo stesso proxy o alcun proxy per alcune connessioni 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

se si desidera visualizzare le impostazioni proxy correnti

git config --list 

se si desidera rimuovere il proxy a livello globale

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

se si desidera rimuovere il proxy per una sola radice git

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

3

ecco l'impostazione del proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

3

Ho seguito la maggior parte delle risposte consigliate qui. Innanzitutto ho ricevuto il seguente errore:

fatale: impossibile accedere a " https://github.com/folder/sample.git/ ": schannel: successivo InitializeSecurityContext non riuscito: errore sconosciuto (0x80092012) - La funzione di revoca non è stata in grado di verificare la revoca del certificato.

Quindi ho provato il seguente comando di @Salim Hamidi

git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080

Ma ho ricevuto il seguente errore:

fatale: impossibile accedere a " https://github.com/folder/sample.git/ ": codice HTTP 407 ricevuto dal proxy dopo CONNECT

Ciò potrebbe accadere se il server proxy non è in grado di verificare il certificato SSL. Quindi vogliamo assicurarci che la verifica ssl sia disattivata (non consigliata per siti non attendibili), quindi ho fatto i seguenti passi che è stato raccomandato da @Arpit ma con lievi modifiche:

1.Prima assicurati di rimuovere tutte le impostazioni proxy precedenti:

git config --global --unset http.proxy

2. Quindi elencare e ottenere il contenuto di gitconfig

git config --list --show-origin

3.Ultimo aggiornamento del contenuto del file gitconfig come di seguito:

[http]
sslCAInfo = C:/yourfolder/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = schannel
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

3

Ho provato tutte le risposte di cui sopra e nulla ha funzionato per me, poiché c'erano problemi di codifica della password proxy.

Questo comando ha funzionato:

git config --global http.proxy http://username@proxy.example.com:PortNumber 

Non inserire la password nel comando. Chiederà dinamicamente quando si tenta di connettersi a qualsiasi repository git.


Grazie, ha funzionato per me. Sebbene l'impostazione di configurazione git dovrebbe essere http.proxy
ochhii,

il nome utente non è sufficiente, è richiesta anche la password.
Dinith,

usa questo codice {git config --global http.proxy proxyuser: proxypwd@proxy.server.com: 8080 }
Dinith

2

Per gli utenti di Windows: se git configo set http_proxy=non funziona, questa risposta può aiutare:

sostituire il git://protocollo del repository git con http://. Nota, dovrai impostare il http_proxyprimo, comunque.


0

Dopo aver provato instancabilmente ogni soluzione in questa pagina, il mio lavoro era usare invece la chiave SSH!

  1. Apri Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Apri il tuo provider Git (Github, Bitbucket, ecc.)
  4. Aggiungi copia il contenuto del file id_rsa.pub nella pagina di input del provider Git (controlla il tuo profilo)
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.