Przygotowanie Gita do pracy z serwerem proxy - kończy się niepowodzeniem z „Upłynął limit czasu żądania”

918

Jak sprawić, by Git używał serwera proxy?

Muszę sprawdzić kod z serwera Git, ale za każdym razem wyświetla się komunikat „Upłynął limit czasu żądania”. Jak to obejść?

Alternatywnie, jak mogę ustawić serwer proxy?

PlagueHammer
źródło
Czy nie byłby to element konfiguracji klienta git? Jedynym aspektem tego, który wydaje się obejmować cmd.exe, jest to, że klient git może pozwolić ci określić proxy w zmiennej środowiskowej.
Michael Burr,
Zredagowałem oryginalne pytanie, aby usunąć wszystkie odwołania do systemu Windows, ponieważ problem ten jest sam w sobie związany z git.
PlagueHammer
3
Pamiętaj, że będziesz mógł skonfigurować proxy dla adresu URL repozytorium git!
VonC
1
To pytanie jest bardzo podobne do „ Jak pobrać z repozytorium Git za pośrednictwem serwera proxy HTTP?” .
Derek Mahar
3
Większość odpowiedzi w tym pytaniu dotyczy serwerów proxy HTTP. Jeśli masz serwer proxy SOCKS, zobacz to pytanie dotyczące protokołów HTTP / S i to pytanie dotyczące protokołu git: //.
użytkownik

Odpowiedzi:

1634

Polecenie użycia:

git config --global http.proxy http://proxyuser:[email protected]:8080
  • zmień proxyuserna użytkownika proxy
  • zmień proxypwdhasło do swojego serwera proxy
  • zmień proxy.server.comna adres URL swojego serwera proxy
  • zmień 8080na port proxy skonfigurowany na serwerze proxy

Pamiętaj, że działa to zarówno dla repozytoriów http, jak i https.

Jeśli w dowolnym momencie zdecydujesz się zresetować tego serwera proxy i pracować bez serwera proxy:

Polecenie użycia:

git config --global --unset http.proxy

Na koniec, aby sprawdzić aktualnie ustawiony serwer proxy:

git config --global --get http.proxy
Salim Hamidi
źródło
15
Dzięki Salim. Mój działał bez proxyuser: proxypwd w adresie URL.
Kwex
11
Dzięki chłopaki. Dla mnie było to uwierzytelnianie oparte na NTLM i po prostu aktualizacja mojego .gitconfig nie działała :(. Musiałem więc uzyskać CNTLM, który korzysta z uwierzytelniania NTLM. Musiałem tylko skierować CNTLM na serwer proxy mojej sieci, a następnie skierować moje oprogramowanie menedżer aktualizacji (np. yum, apt-get lub ssh) do lokalnego proxy. W przypadku operacji git, takich jak klon, ściągnij http.proxy to moje lokalnie skonfigurowane proxy z lokalnym serwerem
Mayur Nagekar
9
Witaj, jak mogę ustawić proxyypass, jeśli ma on znak „@”? Wiem, że muszę scape tej postaci, ale nie wiem jak .. Dziękuję
patricK
13
@patricK Możesz użyć %40jako zamiennika ciągu @nazwy użytkownika / hasła, chociaż sam tego nie testowałem. Mam nadzieję, że to pomoże. :-)
Sourav Ghosh
14
@patricK Mogę potwierdzić, że użycie% 40 jako zamiennika @ działa. Wydaje się, że jeśli znak specjalny nie działa, powinieneś spróbować go zakodować. Kodowania można znaleźć tutaj: w3schools.com/tags/ref_urlencode.asp
Jon
133

To działało dla mnie w Windows XP za korporacyjną zaporą ogniową.

Nie musiałem instalować żadnego lokalnego serwera proxy ani żadnego innego oprogramowania oprócz git v1.771 z 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 = użytkownik proxy, do którego zostałem przydzielony przez nasz dział IT, w moim przypadku jest to ten sam użytkownik systemu Windows, którego używam do logowania się na komputerze, użytkownik Active Directory

proxypwd = hasło mojego użytkownika proxy

proxy.server.com:8080 = nazwa i port proxy, mam go z Panelu sterowania, Opcje internetowe, Połączenia, przycisk Ustawienia sieci LAN, przycisk Zaawansowane w sekcji Serwer proxy, użyj nazwy serwera i portu w pierwszym wierszu (http) .

mygithubuser = użytkownik, którego używam do logowania się na github.com

mygithubpwd = hasło dla mojego użytkownika github.com

repoUser = właściciel użytkownika repo

repoName = nazwa repo

alvaro
źródło
2
Brawo, dzięki! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtplus certyfikaty pobrane zgodnie z opisem w simplicidade.org/notes/archives/2011/06/… (dzięki: stackoverflow.com/a/7206627/98528 ) zrobiły to dla mnie!
akavel
3
Wydaje się, że działa dla mnie, ale git nadal nie działa, gdy poprosię go o sklonowanie repozytorium przy użyciu git://protokołu.
Ajedi32,
3
Kilka wyjaśnień do informacji pablolic, w zależności od tego, co działało dla mnie: 1) Jeśli proxyuser jest loginem Windows, pomiń domenę AD, po prostu podaj nazwę użytkownika bez domeny; 2) Spacje w proxyypwd powinny być kodowane jako „+”. np. „Moje hasło” należy wpisać jako „Moje + hasło”.
Simon Tewsi
2
@ EdmundYeung99: Sugeruję zastąpienie symbolu @% 40. Nie próbowałem tego, ale uważam, że to standardowe kodowanie adresów URL.
Simon Tewsi
2
@demongolem: Podejrzewam, że może być konieczne zakodowanie hasła w adresie URL (nie próbowałem tego, to tylko wyuczone przypuszczenie). Zobacz kolumnę UrlEncoded w tabeli w następującej odpowiedzi: stackoverflow.com/a/11236038/216440 W twoim przypadku oznaczałoby to zamianę $ na% 24.
Simon Tewsi,
52

Ustaw zmienną systemową o nazwie http_proxyo wartości ProxyServer:Port. To jest najprostsze rozwiązanie. Odpowiednio, użyj https_proxyzgodnie ze wskazaniami Daefu w komentarzach.

Ustawienie gitproxy (jak wspomina sleske) to kolejna opcja, ale wymaga „polecenia”, które nie jest tak proste jak powyższe rozwiązanie.

Odnośniki: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html

PlagueHammer
źródło
10
Lub użyj „https_proxy”, jeśli łączysz się z repozytorium https.
daefu,
1
@daefu: Nie jestem pewien, czy musisz ustawić https_proxy. Jestem połączony z repozytorium https i wykonałem pierwszy krok instrukcji pablolic (tj. Dodając http.proxy do pliku konfiguracyjnego git). To wystarczyło mi.
Simon Tewsi
3
https_proxy było dla mnie wymagane. Ustawienie tylko http_proxy nie pozwoliło mu sklonować repozytorium HTTPS
Explunit
@daefu +1 to działa również z wdowami na githubie: stackoverflow.com/questions/16216176/...
blue-sky
4
@ SimonTewsi @explunit Podczas ustawiania zmiennych środowiskowych http_proxywymagane są adresy URL HTTP i https_proxywymagane są adresy URL HTTPS. Alternatywnie można ustawić tylko all_proxydla wszystkich adresów URL. Zobacz ENVIRONMENTsekcję w curl (1) . Jednak podczas ustawiania opcji git-config http.proxyjest używany zarówno dla adresów URL HTTP, jak i HTTPS. Zobacz http.proxyw git-config (1) .
Susam Pal
43

Jeśli konfiguracja serwera proxy z linii poleceń nie działa, prawdopodobnie możesz po prostu edytować plik .gitconfig (w katalogu głównym swojego profilu, który może ukrywać się zarówno w C: \ Documents and Settings, jak i na niektórych dyskach sieciowych) i dodać to :

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

YMMV obejmuje to jednak tylko pierwszy krok konfiguracji wiersza poleceń. Być może będziesz musiał również edytować systemową konfigurację git i nie mam pojęcia, gdzie to ukryli.

Randakar
źródło
1
„Być może trzeba będzie również edytować systemową konfigurację git”. Nie, zwykle nie. Konfiguracja systemu i użytkownika są połączone; ustawienie proxy w jednym z dwóch powinno wystarczyć.
sleske
W moim przypadku znajduje się on na moim komputerze z systemem Windows w [git home] \ etc \ gitconfig - po edycji działa jak urok!
Barmaley Red Star
Jest to szczególnie przydatne, jeśli wiersz polecenia nie lubi hasła ze względu na znaki specjalne.
Pochodzenie
37

Alternatywnie do używania git config --global http.proxy address:portmożesz ustawić proxy w wierszu poleceń:

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

Zaletą jest to, że proxy nie jest ustawione na stałe. W Bash możesz ustawić alias:

alias git-proxy='git -c "http.proxy=address:port"'
Steve Pitchers
źródło
22

Jeśli używasz Ubuntu, wykonaj następujące czynności ...

Krok 1: Zainstaluj korkociąg

$ sudo apt-get install corkscrew

Krok 2: Napisz skrypt o nazwie git-proxy.sh i dodaj następujące

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

Krok 3: Wykonaj skrypt

$ chmod +x git-proxy.sh

Krok 4: Skonfiguruj komendę proxy dla GIT, ustawiając zmienną środowiskową

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

Teraz użyj poleceń git, takich jak

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Sk Hasanujjaman
źródło
Prawdopodobnie powinieneś użyć "$@"zamiast $*. Więcej informacji znajduje się w instrukcji obsługi powłoki.
Hynek-Pichi- Vychodil
15

Napotkano ten sam problem z powodu wielu .gitconfigplików w systemie Windows, wykonaj poniższe kroki, aby to naprawić:

Krok 1: Otwórz Git BASH

Krok 2: Wyszukaj .gitconfig, wykonując następujące polecenie:

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

Krok 3: Skopiuj poniższą treść w .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
źródło
12

Spróbuj umieścić następujące informacje w pliku ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://
augustocbx
źródło
1
Próbowałem wszystkich powyższych rzeczy. Dopiero gdy dodałem wymieniony tutaj wpis https, mogłem pracować.
Brent Fisher
11

Dla protokołu git (git: // ...) zainstaluj socat i napisz skrypt, taki jak:

#!/bin/sh

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

uczyń go wykonywalnym, umieść go na swojej ścieżce, a w ~/.gitconfigzestawie core.gitproxyna nazwę tego skryptu.

Ashutosh
źródło
Działa również w systemie Windows z cygwin's SOCAT. usingsocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj
1
Można użyć, set GIT_PROXY_COMMAND=path\to\scriptaby GIT korzystał z proxy bez bałaganu w git config.
davenpcj
Tak! Wreszcie odpowiednia wskazówka! Potrzebowałem również uwierzytelnienia: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <użytkownik>: <passwd> Znaleziono tutaj: gist.github.com/sit/49288
Joachim
11

Jest coś, co zauważyłem i chcę się tutaj podzielić:

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

Powyższa metoda nie będzie działać dla adresów URL ssh (tj. [email protected]:<user name>/<project name>.git):

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

I nic się nie zmieni, jeśli ustawimy SSH przez port HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ), ponieważ zmienia tylko port (domyślnie 22 ) łączy się połączenie ssh.

(Nie jesteś rodzimym językiem angielskim, w razie potrzeby popraw moje słowa)

Miáo
źródło
7

Pracuję w systemie Windows XP w pracy (stan / rząd), więc zrobiłem swoje badania i znalazłem to tutaj i zadziałało to dla mnie. Mam nadzieję że to pomoże :)

Zmienna środowiskowa http_proxy

Jeśli korzystasz z serwera proxy lub zapory, może być konieczne ustawienie zmiennej środowiskowej http_proxy, aby uzyskać dostęp do niektórych adresów URL z wiersza poleceń. Przykład: Instalowanie ppm dla Perla lub stosowanie RPM w Linuksie, aktualizacja Ubuntu

Ustaw zmienną http_proxy za pomocą nazwy hosta lub adresu IP serwera proxy: http_proxy = http: // [proxy.example.org]

Jeśli serwer proxy wymaga nazwy użytkownika i hasła, dołącz je w następującej formie: http_proxy = http: // [nazwa użytkownika: hasł[email protected]]

Jeśli serwer proxy używa portu innego niż 80, podaj numer portu: http_proxy = http: // [nazwa użytkownika: hasł[email protected]: 8080]

Windows XP

  1. Otwórz Panel sterowania i kliknij ikonę System.
  2. Na karcie Zaawansowane kliknij Zmienne środowiskowe.
  3. Kliknij Nowy w panelu Zmienne systemowe.
  4. Dodaj http_proxy z odpowiednimi informacjami o serwerze proxy (patrz przykłady powyżej).

Linux, Solaris lub HP-UX

Ustaw zmienną środowiskową http_proxy za pomocą polecenia specyficznego dla twojej powłoki (np. Ustaw lub eksportuj). Aby ta zmiana była trwała, dodaj polecenie do odpowiedniego pliku profilu dla powłoki. Na przykład w bash dodaj do pliku .bash_profile lub .bashrc wiersz podobny do następującego:

  1. http_proxy = http: // [nazwa użytkownika: hasło @ nazwa hosta: port];
  2. eksportuj $ http_proxy
Shak Daniel
źródło
tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem
7

Oprócz tych odpowiedzi uznałem za pomocne rozważenie tych 2 punktów:

Konieczne może być wymuszenie schematu uwierzytelniania:

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

Ponadto, zazwyczaj w przypadku schematu uwierzytelniania NTLM, może być konieczne podanie jawnie domeny AD.

W git bash:

echo %userdomain%

I odpowiednio zaktualizuj http.proxy:

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

W każdym razie dochodzenie może być pomocne poprzez dodanie dzienników CURL:

export GIT_CURL_VERBOSE=1
blacelle
źródło
Musiałem dodać proxyAuthMethod przy użyciu git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 nie wysłał żadnego uwierzytelnienia, dopóki nie ustawię tego parametru konfiguracyjnego.
HeatfanJohn
5

Jeśli masz zainstalowane i skonfigurowane tsocks lub proxy , możesz to zrobić

$ tsocks git clone <you_repository>

lub

$ proxychains git clone <you_repository>

aby było krótsze, stworzyłem link /usr/bin/pdo symbolu proxychains, dzięki czemu mogę go używać w ten sposób

p git clone <you_repository>

i mogę go użyć do proxy dowolnego polecenia,

p <cmd-need-be-proxied>

nawiasem mówiąc, proxy nie są aktualizowane przez długi czas, możesz chcieć spróbować proxyych

Fangxing
źródło
4

Ustawienie git proxy na terminalu

gdyby

  • nie chcesz ustawiać proxy dla każdego projektu git ręcznie, jeden po drugim
  • zawsze chcę używać tego samego serwera proxy do wszystkich swoich projektów

Ustaw raz globalnie

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

jeśli chcesz ustawić proxy tylko dla jednego projektu git (mogą wystąpić sytuacje, w których możesz nie chcieć używać tego samego proxy lub dowolnego proxy dla niektórych połączeń 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

jeśli chcesz wyświetlić bieżące ustawienia proxy

git config --list 

jeśli chcesz usunąć serwer proxy globalnie

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

jeśli chcesz usunąć proxy tylko dla jednego git roota

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy
Add080bbA
źródło
3

oto ustawienie proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
hannad rehman
źródło
3

Postępowałem zgodnie z większością odpowiedzi, które zostały tu polecone. Najpierw dostałem następujący błąd:

krytyczny: nie można uzyskać dostępu do „ https://github.com/folder/sample.git/ ”: schannel: next InitializeSecurityContext nie powiodło się: Nieznany błąd (0x80092012) - Funkcja odwołania nie mogła sprawdzić odwołania certyfikatu.

Następnie wypróbowałem następujące polecenie @Salim Hamidi

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

Ale dostałem następujący błąd:

krytyczny: nie można uzyskać dostępu do „ https://github.com/folder/sample.git/ ”: odebrano kod HTTP 407 z serwera proxy po CONNECT

Może się to zdarzyć, jeśli serwer proxy nie może zweryfikować certyfikatu SSL. Chcemy więc upewnić się, że weryfikacja ssl jest wyłączona (niezalecana w przypadku niezaufanych witryn), więc wykonałem następujące kroki zalecane przez @Arpit, ale z niewielkimi zmianami:

1. Najpierw pamiętaj o usunięciu poprzednich ustawień proxy:

git config --global --unset http.proxy

2. Następnie wyświetl listę i pobierz zawartość gitconfig

git config --list --show-origin

3.Ostatnia aktualizacja zawartości pliku gitconfig, jak poniżej:

[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
źródło
3

Próbowałem wszystkich powyższych odpowiedzi i nic mi nie działało, ponieważ wystąpiły problemy z kodowaniem hasła proxy.

To polecenie działało:

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

Nie wpisuj hasła w swoim poleceniu. Będzie dynamicznie pytał, kiedy spróbujesz połączyć się z dowolnym repozytorium git.

Ishtdeep Hora
źródło
Dzięki, to zadziałało dla mnie. Chociaż ustawieniem konfiguracji git powinien być http.proxy
ochhii
nazwa użytkownika to za mało. Wymagane jest również hasło.
Dinith
użyj tego kodu {git config --global http.proxy proxyuser: [email protected]: 8080 }
Dinith
2

Dla użytkowników systemu Windows: Jeśli git configlub set http_proxy=nie działa, to odpowiedź może pomóc:

zamień git://protokół repozytorium git na http://. Pamiętaj, że i tak musisz ustawić http_proxypierwszą.

DomTomCat
źródło
0

Po niestrudzonym wypróbowaniu wszystkich rozwiązań na tej stronie, pracowałem nad użyciem i klucza SSH zamiast tego!

  1. Otwórz Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Otwórz swojego dostawcę Git (Github, Bitbucket itp.)
  4. Dodaj kopię pliku id_rsa.pub do strony wejściowej dostawcy Git (sprawdź swój profil)
Janac Meena
źródło