Jak pobierać z repozytorium Git za pośrednictwem serwera proxy HTTP?


491

Uwaga: chociaż opisany przypadek użycia dotyczy użycia podmodułów w projekcie, to samo dotyczy normalnej git clonewersji repozytorium przez HTTP.

Mam projekt pod kontrolą Git. Chciałbym dodać submoduł:

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

Ale rozumiem

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

Mam skonfigurowane moje HTTP_PROXY:

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

Mam nawet globalne ustawienie Git dla proxy HTTP:

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

Czy ktoś pobrał HTTP, aby konsekwentnie działał przez proxy? Naprawdę dziwne jest to, że kilka projektów w GitHub działa dobrze ( awesome_nested_setna przykład), ale inne konsekwentnie zawodzą ( na przykład szyny ).


Czy Twój serwer proxy może cenzurować niektóre słowa lub coś, wpływając w ten sposób tylko na te repozytoria, w których te słowa pojawiają się jako część strumienia bajtów?
pjz


4
@alvaro, myślę, że masz na myśli, że uzyskanie gita do pracy z serwerem proxy jest możliwą duplikatem tego pytania. To pytanie jest starsze niż to, do którego się odnosisz.
Derek Mahar

2
@James, twoje „globalne” ustawienie Git dla serwera proxy nie jest tak naprawdę globalne, ale lokalne. Aby być globalny, trzeba dostarczyć argumentów --globaldo git config.
Derek Mahar

1
@DerekMahar Starsze pytania mogą być zamknięte z duplikatów nowszych pytań, jeśli nowsze pytanie ma lepszą jakość (lub bardziej ogólnie można je zastosować).
Raedwald

Odpowiedzi:


584

Możesz także ustawić serwer proxy HTTP, którego używa Git we właściwości konfiguracji globalnej http.proxy:

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

Aby uwierzytelnić się za pomocą proxy:

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

( Podziękowania dla @EugeneKulabuhov i @JaimeReynoso za format uwierzytelnienia.)


8
To działało dla mnie: ustaw HTTP_PROXY w środowisku dla użytkownika (w systemie Windows), a następnie powyższy komentarz za pomocą $ HTTP_PROXY (wielkie litery). +1 za to rozwiązanie.
Sean Aitken

4
CleverCoder, w systemie Windows, musisz podać% HTTP_PROXY%, a nie $ HTTP_PROXY (chyba że korzystasz z Cygwin, oczywiście). Zmienię swoją odpowiedź do pracy w systemie Windows zamiast w środowisku Unix.
Derek Mahar

7
gdzie mam podać nazwę użytkownika i hasło do serwera proxy?
Duna

26
Użyj git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080składni, aby podać nazwę użytkownika / hasło
Eugene Kulabuhov

2
Dla każdego, kto może mieć problemy z serwerem proxy, http: // <identyfikator_użytkownika>: <hasło> @ <ProxyURL>: <port> / pracował dla mnie
Jaime Reynoso

146

Jest na to kilka świetnych odpowiedzi. Jednak pomyślałem, że się włożę, ponieważ niektóre serwery proxy wymagają uwierzytelnienia przy użyciu identyfikatora użytkownika i hasła. Czasami może to być domena.

Na przykład jeśli konfiguracja serwera proxy jest następująca:

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

Następnie dodaj do .gitconfigpliku za pomocą następującego polecenia:

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

Nie martw się https. Tak długo, jak określony serwer proxy obsługuje http i https, wystarczy jeden wpis w pliku konfiguracyjnym.

Następnie możesz sprawdzić, czy polecenie .gitconfigpomyślnie dodało wpis do pliku, wykonując cat .gitconfig:

Na końcu pliku zobaczysz następujący wpis:

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

Otóż ​​to!


Ciekawy. Jestem w stanie przejść do części „Rozwiązywanie delt” ze 100%, ale wygląda na to, że proces klonowania po prostu się zawiesza. Czy ktoś tego doświadczył?
Rzym.

1
+1. Wkrótce będziesz mógł skonfigurować proxy dla każdego adresu URL!
VonC

@apoplexy, czy możesz skomentować sugerowaną edycję, proszę, abym mógł rozważyć
Max MacLeod

3
Jeśli w nazwie użytkownika lub haśle masz symbol @, możesz go zakodować za pomocą adresu URL %40i zadziała.
Adarsha,

3
Zamiast cat .gitconfig możesz wyświetlić ustawienia konfiguracji za pomocą git config --list
user3969377

125

Ostatecznie działało ustawienie http_proxyzmiennej środowiskowej. Ustawiłem HTTP_PROXYpoprawnie, ale git najwyraźniej bardziej lubi wersję z małymi literami.


3
Czy ustawienie http.proxyw globalnej konfiguracji Git działa? W swoim pytaniu ustawiasz http.proxykonfigurację lokalnego repozytorium.
Derek Mahar,

22
W moim przypadku musiałem ustawićhttps_proxy
M Smith

1
https.proxyWydawało się, że działa dla mnie, gdy
używałem

3
@MSmith Jeśli musisz to ustawić, https_proxyoznacza to, że httpsnie używasz httppytania, o które chodzi.
Piotr Dobrogost

3
Curl i libcurl nie rozpoznają wielkich liter HTTP_PROXY i HTTPS_PROXY. Zobacz ten link, aby uzyskać więcej informacji: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Wygląda na to, że używasz kompilacji Git mingw w systemie Windows (lub innej, o której nie słyszałem). Istnieją sposoby na debugowanie tego: wierzę, że cała praca proxy HTTP dla git jest wykonywana przez curl. Ustaw tę zmienną środowiskową przed uruchomieniem git:

GIT_CURL_VERBOSE=1

To powinno przynajmniej dać ci wyobrażenie o tym, co dzieje się za kulisami.


7
Kiedy dodam tę zmienną środowiskową, msysgit nie drukuje nic więcej. :(
Andrew Arnott

po pewnym czasie walki z serwerami proxy ta wskazówka pomogła mi dowiedzieć się, że baza danych certyfikatu curl została zagubiona / pomieszana, i właśnie dlatego żądania nie powiodły się.
davenpcj

Szukałem tego od jakiegoś czasu. Dzięki.
M Smith

40

Jeśli chcesz po prostu używać proxy w określonym repozytorium, nie potrzebujesz go w innych repozytoriach. Preferowanym sposobem jest -c, --config <key=value>opcja, gdy jesteś git clonerepozytorium. na przykład

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

To dziwne, próbowałem ustawić $ http_proxy, ale git tego nie szanował. Wygląda na to, że zależy mu tylko na własnej konfiguracji ...
weberc2

Pracuje. Możesz także określić --configwiele razy, np. Kiedy chcesz również ustawić https.proxy.
barfuin

Dzięki! Dokładnie to, czego szukałem
Boyang

2
klonuj z konfiguracją proxy, ale bez zmiany konfiguracji proxy użytkownika. Właśnie tego potrzebuję! Dzięki.
doom

26

Kiedy twój zespół sieciowy dokonuje inspekcji ssl poprzez przepisywanie certyfikatów, to użycie adresu URL http zamiast adresu https w połączeniu z ustawieniem tej zmiennej działało dla mnie.

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

2
Możesz także dodać to do środowiska, aby zaakceptować przepisane certyfikaty oferowane przez kolesie sieciowe w celu kontroli ruchu: eksport GIT_SSL_NO_VERIFY = true
bbaassssiiee

Pracował dla mnie idealnie. Dzięki. Właśnie musiałem dodać git config --global http.proxy proxy: 8081 git config --global https.proxy proxy: 8081
Sid

proste i szybkie rozwiązanie, +1 za tę odpowiedź.
WALKER

1
Dzięki @sethbc, @datasmid! Potrzebowałem GIT_CURL_VERBOSE = 1, aby debugować, a GIT_SSL_NO_VERIFY = true, aby pominąć weryfikację.
Henry Rivera

nie pracuje ze mną. nawet z GIT_SSL_NO_VERIFY var
keinabel

20

Możesz także edytować plik .gitconfig znajdujący się w katalogu% userprofile% w systemie Windows ( notatnik% userprofile% .gitconfig ) lub w katalogu ~ w systemie Linux ( vi ~ / .gitconfig ) i dodać sekcję http jak poniżej.

Zawartość pliku .gitconfig:

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

20

Dla mnie git: // po prostu nie działa przez proxy, chociaż działa https: //. To spowodowało trochę bólu głowy, ponieważ uruchomiłem skrypty, które wszystkie używały git: //, więc nie mogłem tak łatwo ich wszystkich zmienić. Jednak znalazłem ten GEM

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

Dziękuję, to bardzo pomogło
dgrat

Wiem, że miałem również problemy z pobraniem z git: //. Czy rozważałeś problem z kluczem SSH? Mój problem był spowodowany złą konfiguracją klucza SSH.
avazula

17

To stare pytanie, ale jeśli korzystasz z systemu Windows, rozważ ustawienie HTTPS_PROXY, jeśli pobierasz za pośrednictwem adresu URL https. Pracował dla mnie!


2
Wystarczyło ustawić https_proxysamą zmienną środowiskową (bez opcji git global lub proxy proxy repo) w moim przypadku (msysgit w systemie Windows XP).
Piotr Dobrogost

13

Nie mogę znaleźć http.proxyani GIT_PROXY_COMMANDpracować dla mojego uwierzytelnionego serwera proxy HTTP. Serwer proxy nie jest uruchamiany w żaden sposób. Ale znajduję sposób na obejście tego.

  1. Zainstaluj korkociąg lub inne potrzebne alternatywy.
  2. Utwórz plik auth. Format authfileto:, user_name:passwordi user_name, passwordto twoja nazwa użytkownika i hasło dostępu do twojego proxy. Aby utworzyć taki plik, wystarczy uruchomić komendę tak: echo "username:password" > ~/.ssh/authfile.

  3. Edytuj ~/.ssh/configi upewnij się, że jego uprawnienie to 644:chmod 644 ~/.ssh/config

Weźmy na przykład github.com, dodaj następujące wiersze do ~/.ssh/config:

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

Teraz, gdy cokolwiek zrobisz git@github.com, automatycznie użyje serwera proxy. Możesz łatwo zrobić to samo z Bitbucket .

To nie jest tak eleganckie jak inne podejścia, ale działa jak urok.


1
Czy możesz opracować krok 2, „utwórz plik auth”? Wygląda na to, że twoje podejście jest jedyne, które będzie działać na git: // urls.
nik

@NikBagdon Dodałem więcej szczegółów do kroku 2. Daj mi znać, jeśli jest coś niejasnego :)
Carlosin

11

W systemie Windows, jeśli nie chcesz wstawiać hasła do .gitconfig jako zwykłego tekstu, możesz użyć

Uwierzytelnia cię w stosunku do zwykłego lub nawet Windows NTLM proxy i uruchamia localhost-proxy bez uwierzytelnienia.

Aby go uruchomić:

  • Zainstaluj Cntml
  • Skonfiguruj Cntml zgodnie z dokumentacją, aby przekazać uwierzytelnianie proxy
  • Wskaż git na nowy serwer proxy localhost:

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

2
O ile warto, to powinna być zaakceptowana odpowiedź, on jest w systemie Windows. Nie ma przejrzystego proxy (inaczej nie byłoby problemu.
booyaa

9

Dla mnie to zadziałało:

sudo apt-get install socat

Utwórz plik wewnątrz $ BIN_PATH / gitproxy za pomocą:

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

Nie zapomnij dać mu uprawnień do wykonywania

chmod a+x gitproxy

Uruchom następujące polecenia, aby skonfigurować środowisko:

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

1
Link do wyjaśnienia i link do streszczenia z aktualizacjami skryptu (mini-): emilsit.net/blog/archives/…
Karl Richter

Ta odpowiedź jest jedyną, która działa dla git://adresów URL protokołów, dla tych (rzadkich) serwerów git, które nie obsługują protokołu https. Działa również w systemie Windows, z odpowiednim plikiem wsadowym i socat dla systemu Windows.
davenpcj

8

Skonfiguruj proxy do git

Komenda

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

przykład

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

7

Ustaw Git credential.helper na wincred.

git config --global credential.helper wincred

Upewnij się, że jest tylko 1 referencja. Pomocnik

git config -l

Jeśli jest więcej niż 1 i nie ustawiono WinCred, usuń go.

git config --system --unset credential.helper

Teraz ustaw proxy bez hasła.

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

Sprawdź, czy wszystkie dodane ustawienia wyglądają dobrze ....

git config --global -l

Teraz możesz iść!


6

Miałem ten sam problem z nieco inną poprawką: ODBUDOWAĆ GIT Z WSPARCIEM HTTP

git:Protokół nie działa przez moją korporacyjnej zapory.

Na przykład upłynął limit czasu:

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

curl github.comdziała jednak dobrze, więc wiem, że moja http_proxyzmienna środowiskowa jest poprawna.

Próbowałem użyć http, jak poniżej, ale dostałem natychmiastowy błąd.

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

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

Próbowałem przekompilować git tak:

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

ale nadal występuje błąd krytyczny.

Wreszcie po kilku frustrujących godzinach przeczytałem plik konfiguracyjny i zobaczyłem to:

# Zdefiniuj CURLDIR = / foo / bar, jeśli masz nagłówek curl i pliki bibliotek

# / foo / bar / include i / foo / bar / lib katalogi.

Przypomniałem sobie wtedy, że nie zastosowałem się curldo źródła i zacząłem szukać plików nagłówkowych. Rzeczywiście, nie zostały zainstalowane. To był problem. Marka nie narzeka na brakujące pliki nagłówkowe. Więc nie zdawałem sobie sprawy, że --with-curlopcja nic nie zrobiła (w rzeczywistości jest ona domyślna w mojej wersji git).

Wykonałem następujące czynności, aby to naprawić:

  1. Dodano nagłówki potrzebne do wykonania:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Usunięto gitz /usr/local(ponieważ chcę, aby nowa instalacja tam była).

    Po prostu usunąłem git*z /usr/local/sharei/usr/local/libexec

  3. Szukano katalogów dołączających zawierających pliki nagłówkowe curli expat, a następnie (ponieważ przeczytałem configure) dodałem je do środowiska w taki sposób:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Działa configurez następującymi opcjami, które ponownie zostały opisane w samym configurepliku, a także były domyślnymi, ale do cholery:

    ./configure  --with-curl --with-expat
    
  5. A teraz httpdziała z gitmoją zaporą firmową:

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

Cieszę się, że wysunąłeś to do przodu, nie zdawałem sobie sprawy, że protokół git nie był obsługiwany na moim kałamarnicy
rupert160



3

możesz użyć:

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


2

Dla Windowsa

Idź do -> C: / Users / nazwa_użytkownika / gitconfig

Zaktualizuj plik gitconfig z poniższymi szczegółami

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

Jak sprawdzić swój serwer proxy i numer portu?

Internet Explorer -> Ustawienia -> Opcje internetowe -> Połączenia -> Ustawienia sieci LAN


2

Poniższa metoda działa dla mnie:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Uwaga Zsh: Zmodyfikuj plik ~ / .zshenv zamiast ~ / .bash_profile.
  • Uwaga Ubuntu i Fedora: Zmodyfikuj plik ~ / .bashrc zamiast ~ / .bash_profile.

2

Warto wspomnieć: większość przykładów w sieci pokazuje przykłady takie jak

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

Wygląda więc na to, że - jeśli twoje proxy wymaga uwierzytelnienia - musisz pozostawić hasło firmy w git-config. Co nie jest naprawdę fajne.

Ale jeśli tylko skonfigurujesz użytkownika bez hasła:

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

Wydaje się, że Git (przynajmniej na moim komputerze z systemem Windows bez pomocnika poświadczeń) rozpoznaje to i prosi o podanie hasła proxy przy dostępie do repo.


Jesteś moim człowiekiem, ponieważ moja nazwa użytkownika i hasło firmy sso mają tak wiele specjalnych symboli, które były niemożliwe do zakodowania i przejścia. Dzięki temu „escamotage” byłem w stanie podać hasło na twarzy klonowania lub inne kroki po ustawieniu adresu proxy.
Carmine Tambascia

1

To nie jest problem z twoim proxy. Jest to problem z githubem (lub gitem). Nie udaje mi się to także na git-1.6.0.1 na Linuksie. Błąd jest już zgłaszany (przez ciebie nie mniej).

Pamiętaj, aby usunąć swoje pasty, są już w Google. Edycja: Musiałeś marzyć, chyba nie możesz ich usunąć. Zamiast tego użyć Gist ?


Wysłałem do github i msysGit również b / c Nie byłem pewien, gdzie leży problem. Niestety nie mogę usunąć ciastek.
James A. Rosen,


1

Powyższe odpowiedzi działały dla mnie, gdy mój serwer proxy nie wymaga uwierzytelnienia. Jeśli używasz serwera proxy, który wymaga uwierzytelnienia, możesz spróbować CCProxy. Mam mały samouczek, jak go tutaj skonfigurować,

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

Byłem w stanie pchać, ciągnąć, tworzyć nowe repozytorium. Wszystko działało dobrze. Upewnij się, że wykonałeś czystą deinstalację i ponowną instalację nowej wersji, jeśli masz problemy z Git, tak jak ja.



0

Obejrzałem proxy używając https ... niektóre proxy nawet nie sprawdzają 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

Jak odpowiedziało wielu, ale to tylko dla Winodws USER, który stoi za proxy z auth.

Ponowna instalacja (pierwsza nieudana, nie usuwaj).

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"

jeśli masz jakiś specjalny znak w user / pass użyj url_encode

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.