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.