Git deposundan bir HTTP proxy üzerinden nasıl çekebilirim?


491

Not: açıklanan kullanım örneği bir projede alt modüllerin kullanılmasıyla ilgili olsa da, aynı durum git cloneHTTP üzerinden bir havuzun normali için de geçerlidir .

Git kontrolünde bir projem var. Bir alt modül eklemek istiyorum:

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

Ama anladım

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

HTTP_PROXY ayarladım:

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

Hatta http proxy için genel bir Git ayarım var:

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

Herkes bir proxy üzerinden sürekli çalışmak için HTTP getirileri aldı? Gerçekten garip olan, GitHub'daki birkaç projenin iyi çalışması ( awesome_nested_setörneğin), ancak diğerleri sürekli olarak başarısız oluyor ( örneğin raylar ).


Proxy'niz bazı sözcükleri sansürleyebilir, böylece yalnızca bu kelimelerin bayt akışının bir parçası olarak ortaya çıktığı depoları etkiler mi?
pjz

8
Git'in

4
@alvaro, sanırım git bir proxy sunucu ile çalışmak Başlarken bu sorunun olası bir kopyası olduğunu. Bu soru, atıfta bulunduğunuz sorudan daha eskidir.
Derek Mahar

2
@James, proxy sunucusu için "global" Git ayarınız aslında global değil, yereldir. Küresel olmak için, argüman --globalsağlamanız gerekir git config.
Derek Mahar

1
@DerekMahar Yeni soru daha kaliteli (veya daha genel olarak uygulanabilir) ise, eski sorular yeni soruların kopyaları ile kapatılabilir.
Raedwald

Yanıtlar:


584

Git'in global configuration özelliğinde kullandığı HTTP proxy'sini de ayarlayabilirsiniz http.proxy:

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

Proxy ile kimlik doğrulaması yapmak için:

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

( Kimlik doğrulama biçimi için kredi @EugeneKulabuhov ve @ JaimeReynoso'ya gidiyor .)


8
Bu benim için çalıştı: Kullanıcı için ortamdaki HTTP_PROXY'yi (Windows'ta), ardından $ HTTP_PROXY (büyük harf) ile yukarıdaki yorumu ayarlayın. Bu çözüm için +1.
Sean Aitken

4
CleverCoder, Windows'ta, $ HTTP_PROXY değil,% HTTP_PROXY% (elbette Cygwin kullanmıyorsanız) belirtmeniz gerekir. Yanıtımı Unix ortamı yerine Windows'ta çalışacak şekilde düzenleyeceğim.
Derek Mahar

7
proxy için kullanıcı adını ve şifreyi nereye koyabilirim?
Duna

26
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080Kullanıcı adı / şifre sağlamak için sözdizimini kullanın
Eugene Kulabuhov

2
Proxy ile sorun yaşayan herkes için http: // <UserID>: <Password> @ <ProxyURL>: <Port> / benim için çalıştı
Jaime Reynoso

146

Bu konuda zaten bazı harika cevaplar var. Ancak, bazı proxy sunucuları bir kullanıcı kimliği ve parola ile kimlik doğrulaması gerektirdiğinden ben çip olacağını düşündüm. Bazen bu bir etki alanında olabilir.

Örneğin, proxy sunucu yapılandırmanız aşağıdaki gibi ise:

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

Ardından, .gitconfigaşağıdaki komutu kullanarak dosyanızı ekleyin :

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

Endişelenme https. Belirtilen proxy sunucusu http ve https'yi desteklediği sürece, yapılandırma dosyasında bir giriş yeterli olacaktır.

Daha sonra komutun girdiyi .gitconfigdosyanıza başarıyla eklediğini doğrulayabilirsiniz cat .gitconfig:

Dosyanın sonunda aşağıdaki gibi bir giriş göreceksiniz:

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

Bu kadar!


İlginç. Ben% 100 ile "deltaların Çözülmesi" bölümüne almak mümkün ama sonra klon süreci sadece asılı gibi görünüyor. Bunu yaşayan var mı?
Roma


@apoplexy önerdiğiniz düzenleme hakkında yorum yapabilir misiniz, bu yüzden düşünebilirim
Max MacLeod

3
Kullanıcı adınız veya şifrenizde @ sembolü varsa, URL'yi kodlayabilirsiniz %40ve çalışır.
Adarsha

3
Cat .gitconfig yerine, yapılandırma ayarlarını git config --list
user3969377 ile listeleyebilirsiniz

125

Sonunda işe yarayan şey, http_proxyortam değişkenini ayarlamaktı . HTTP_PROXYDoğru ayarlamıştım , ama git görünüşte küçük harf versiyonunu daha iyi seviyor.


3
Genel http.proxyGit yapılandırmasındaki ayar çalışıyor mu? http.proxySorunuzda, yerel depo yapılandırmasını ayarladınız .
Derek Mahar

22
Benim durumumda ayarlamak zorunda kaldımhttps_proxy
M Smith

1
https.proxyGithub üzerinde https kullanırken benim için çalışıyor gibi görünüyordu
Shervin Asgari

3
@MSmith Bunu ayarlamak zorunda https_proxyolsaydınız, hangi soruyla ilgili httpsdeğil kullandığınız anlamına gelir http.
Piotr Dobrogost

3
Curl ve libcurl, büyük harf HTTP_PROXY ve HTTPS_PROXY'yi tanımıyor. Daha fazla bilgi için bu bağlantıya bakın: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Windows'ta Git'in mingw derlemesini kullandığınız anlaşılıyor (veya muhtemelen duymadığım başka bir tane). Bu hata ayıklama yolları vardır: Git için tüm http proxy iş kıvırmak tarafından yapılır inanıyorum. Git çalıştırmadan önce bu ortam değişkenini ayarlayın:

GIT_CURL_VERBOSE=1

Bu en azından perde arkasında neler olduğu hakkında bir fikir vermelidir.


7
Bu ortam değişkenini eklediğimde msysgit fazladan bir şey yazdırmıyor. :(
Andrew Arnott

bir süre vekillerle kavga ettikten sonra, bu ipucu curl's cert veritabanının eksik / dağınık olduğunu bulmamı sağladı ve isteklerin başarısız olmasının nedeni buydu.
davenpcj

Bunu bir süredir arıyordum. Teşekkürler.
M Smith

40

Yalnızca belirtilen bir depoda proxy kullanmak istiyorsanız, diğer depolara gerek yoktur. Depo tercih -c, --config <key=value>ettiğinizde tercih edilen yöntemdir git clone. Örneğin

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

Bu garip, $ http_proxy ayarlamaya çalıştım, ama git buna saygı göstermedi. Görünüşe göre sadece kendi yapılandırmasını önemsiyor ...
weberc2

İşler. Ayrıca --configbirden çok kez belirtebilirsiniz , örneğin ayarlamak istediğinizde https.proxy.
Mayıs

Teşekkürler! Tam olarak aradığım şey
Boyang

2
proxy proxy ile klonlayın, ancak kullanıcının proxy yapılandırmasını değiştirmeden. Tam olarak ihtiyacım olan şey! Teşekkür.
kıyamet

26

Ağ ekibiniz sertifikaları yeniden yazarak ssl denetimi yaptığında, https yerine http url kullanarak bu varlığın ayarlanması benim için işe yaradı.

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

2
Ayrıca ağın trafiğinizi denetlemek için önerdiği yeniden yazılmış sertifikaları kabul etmek için ortama ekleyebilirsiniz: export GIT_SSL_NO_VERIFY = true
bbaassssiiee 12:03

Benim için mükemmel çalıştı. Teşekkürler. Git config --global http.proxy proxy: 8081 git config --global https.proxy proxy: 8081
Sid

basit ve hızlı bir çözüm, bu cevap için +1.
WALKER

1
@Sethbc, @datasmid için teşekkürler! Hata ayıklamak için GIT_CURL_VERBOSE = 1 ve doğrulamayı atlamak için GIT_SSL_NO_VERIFY = true gerekiyordu.
Henry Rivera

benimle çalışmıyor. GIT_SSL_NO_VERIFY var
keinabel

20

Windows sistemindeki% userprofile% dizininde ( notepad% userprofile% .gitconfig ) veya Linux sistemindeki ~ dizininde ( vi ~ / .gitconfig ) bulunan .gitconfig dosyasını da düzenleyebilir ve aşağıdaki gibi bir http bölümü ekleyebilirsiniz .

.Gitconfig dosyasının içeriği:

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

20

Git: // benim için https: // olsa da proxy üzerinden çalışmaz. Biraz baş ağrısına neden oldu çünkü hepsi git: // kullanan komut dosyaları çalıştırıyordum, bu yüzden hepsini kolayca değiştiremedim. Ancak bu GEM'i buldum

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

Teşekkür ederim, bu çok yardımcı oldu
dgrat

Git: // 'den çekmede de sorunlar yaşadığımı biliyorum. SSH anahtarı sorununu düşündünüz mü? Sorunum, kötü bir SSH anahtarı yapılandırması nedeniyle oldu.
avazula

17

Bu eski bir sorudur, ancak Windows kullanıyorsanız, bir https URL'si aracılığıyla alıyorsanız HTTPS_PROXY'yi de ayarlamayı düşünün. Benim için çalıştı!


2
Bu dizi için yeterliydi https_proxytek başına ortam değişkeni (hiçbir git küresel veya proxy seçeneği ayarlanmış repo) (Windows XP üzerinde msysgit) benim durumumda.
Piotr Dobrogost

13

Kimliği doğrulanmış http proxy'im için ne bu ne http.proxyde GIT_PROXY_COMMANDçalışırım. Proxy her iki şekilde de tetiklenmez. Ama bunun üzerinde çalışmanın bir yolunu buluyorum.

  1. Tirbuşon veya istediğiniz diğer alternatifleri takın .
  2. Bir kimlik doğrulama dosyası oluşturun. Biçimi authfile: user_name:passwordve user_name, passwordproxy'nize erişmek için kullanıcı adınız ve şifrenizdir. Böyle bir dosya oluşturmak için, sadece böyle komutu çalıştırın: echo "username:password" > ~/.ssh/authfile.

  3. Düzenleyin ~/.ssh/configve izninin şu olduğundan emin olun 644:chmod 644 ~/.ssh/config

Örnek olarak github.com adresine aşağıdaki satırları ekleyin ~/.ssh/config:

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

Şimdi ne zaman bir şey yaparsanız git@github.com, proxy otomatik olarak kullanılacaktır. Aynı şeyi Bitbucket'e kolayca yapabilirsiniz .

Bu diğer yaklaşımlar kadar zarif değil, ama bir cazibe gibi çalışıyor.


1
Lütfen 2. adımda "bir kimlik doğrulama dosyası oluşturun" konusunu açıklayabilir misiniz? Görünüşe göre git: // urls için işe yarayan tek yaklaşım.
nik

@NikBagdon 2. adıma daha fazla ayrıntı ekledim. Belirsiz bir şey olup olmadığını bana bildirin :)
Carlosin

11

Windows'ta, parolanızı düz metindeki .gitconfig dosyasına koymak istemiyorsanız,

Normal veya hatta Windows NTLM proxy'ye karşı kimlik doğrulaması yapar ve localhost-proxy'yi kimlik doğrulaması olmadan başlatır.

Çalıştırmak için:

  • Cntml'i yükle
  • Proxy kimlik doğrulamasını geçmek için Cntml'yi dokümanlara göre yapılandırın
  • Git'i yeni localhost proxy'nize yönlendirin:

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

2
Değeri için, bu kabul edilen cevap olmalıydı, o pencerelerde. Saydam bir proxy yok (aksi takdirde sorun olmaz.
booyaa

9

Benim için işe yarayan şuydu:

sudo apt-get install socat

$ BIN_PATH / gitproxy dosyanızın içinde aşağıdakilerle bir dosya oluşturun:

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

Yürütme izinleri vermeyi unutmayın

chmod a+x gitproxy

Kurulum ortamına aşağıdaki komutları çalıştırın:

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

1
Bir açıklama ve (mini-) komut dosyasında güncellemeler içeren bir özete bağlantı
Karl Richter

Bu yanıt, git://protokol URL'lerinde, https'yi desteklemeyen (nadir) git sunucularında çalışan tek yanıttır . Ayrıca pencerelerde, uygun bir toplu iş dosyası ve pencereler için socat ile çalışır.
davenpcj

8

Git için proxy kurulumu

komuta

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

misal

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

7

Git credential.helper öğesini wincred olarak ayarlayın.

git config --global credential.helper wincred

Yalnızca 1 kimlik bilgisinin olduğundan emin olun.

git config -l

1'den fazla varsa ve wincred olarak ayarlanmamışsa kaldırın.

git config --system --unset credential.helper

Şimdi proxy'yi parola olmadan ayarlayın.

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

Eklediğiniz tüm ayarların iyi göründüğünden emin olun ....

git config --global -l

Şimdi gitmekte fayda var!


6

Biraz farklı bir düzeltme ile aynı sorunu yaşadım: HTTP DESTEĞİ İLE GELİŞTİRME GIT

git:Protokol benim şirket güvenlik duvarı aracılığıyla işe yaramadı.

Örneğin, bu zaman aşımına uğradı:

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

curl github.comama gayet iyi çalışıyor, bu yüzden http_proxyçevre değişkenimin doğru olduğunu biliyorum .

httpAşağıdaki gibi kullanmayı denedim , ancak hemen bir hata aldım.

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

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

Git şöyle derleme yeniden denedim:

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

ama yine de ölümcül hata var.

Son olarak, birkaç sinir bozucu saatten sonra, yapılandırma dosyasını okudum ve gördüm:

# Curl başlığınız ve kütüphane dosyalarınız içeriyorsa CURLDIR = / foo / bar tanımlayın

# / foo / bar / include ve / foo / bar / lib dizinleri.

O zaman hatırladım ki curl, kaynaktan uymadım ve başlık dosyalarını aramaya gittim. Tabii ki, monte edilmediler. Sorun buydu. Make eksik başlık dosyaları hakkında şikayet etmedi. Bu yüzden --with-curlseçeneğin hiçbir şey yapmadığını fark etmedim (aslında, benim versiyonumda varsayılangit ).

Bunu düzeltmek için aşağıdakileri yaptım:

  1. Marka için gerekli başlıklar eklendi:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Kaldırılan gitdan /usr/local(yeni orada yaşamak yüklemek istediğiniz gibi).

    Sadece kaldırıldı git*gelen /usr/local/shareve/usr/local/libexec

  3. curlVe expatüstbilgi dosyalarını içeren include dirs aradı ve sonra (ben okumuştu çünkü configure) bu gibi ortama ekledi:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. configureYine, configuredosyanın kendisinde açıklanan ve aynı zamanda varsayılanlar olan ama ne halt olan aşağıdaki seçeneklerle koştu :

    ./configure  --with-curl --with-expat
    
  5. Ve şimdi httpile çalışır gitbenim şirket güvenlik duvarı üzerinden:

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

Bunu öne sürdüğüne sevindim, git protokolünün kalamar
proxy'imde


5

Bu benim için çalıştı.

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

3

kullanabilirsiniz:

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


2

Pencereler için

Git -> C: / Kullanıcılar / kullanıcı_adı / gitconfig

Gitconfig dosyasını aşağıdaki ayrıntılarla güncelleyin

[Http]

[HTTPS]

proxy = https://your_proxy:your_port

[Http]

proxy = http://your_proxy:your_port

Proxy ve bağlantı noktası numaranızı nasıl kontrol edersiniz?

Internet Explorer -> Ayarlar -> Internet Seçenekleri -> Bağlantılar -> LAN Ayarları


2

Aşağıdaki yöntem benim için çalışıyor:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Zsh notu: ~ / .bash_profile yerine ~ / .zshenv dosyanızı değiştirin.
  • Ubuntu ve Fedora notu: ~ / .bash_profile yerine ~ / .bashrc dosyanızı değiştirin.

2

Söz etmek Worth: Net gösteri Çoğu örnekler gibi örneklerde

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

Öyle görünüyor ki - proxy'nizin kimlik doğrulaması gerekiyorsa - şirket parolanızı git-config içinde bırakmanız gerekir . Bu gerçekten hoş değil.

Ancak, kullanıcıyı şifresiz olarak yapılandırırsanız:

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

Git, (en azından kimlik bilgileri yardımcısı olmayan Windows makinemde) bunu fark ediyor gibi görünüyor ve yeniden erişimde proxy parolası istiyor.


Benim adamımsın, sso şirketimin kullanıcı adı ve şifresim kodlamak ve geçmek için oldukça imkansız olan çok özel simbollara sahip. Bu "escamotage" ile proxy adresini ayarladıktan sonra klon yüzünde veya başka bir sonraki adımda şifreyi verebildim.
Carmine Tambascia

1

Bu proxy'nizle ilgili bir sorun değil. Github (veya git) ile ilgili bir sorun var. Linux'ta git-1.6.0.1'de benim için başarısız oluyor. Hata zaten bildirildi (sizin tarafınızdan daha az değil).

Pasties'i sildiğinizden emin olun, zaten Google'dalar. Düzenleme: Rüya görmeliydim, sanırım onları silemezsiniz. Kullanım Gist yerine?


Ben github ve msysGit yanı sıra b / c gönderildi Ben sorunun nerede yatıyordu emin değildi. Maalesef pasties'i silemiyorum.
James A. Rosen


1

Yukarıdaki yanıtlar proxy'im kimlik doğrulamasına ihtiyaç duymadığında benim için çalıştı. Kimlik doğrulaması gerektiren proxy kullanıyorsanız, CCProxy'yi deneyebilirsiniz. Burada nasıl ayarlanacağına dair küçük bir eğiticim var,

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

İtme, çekme, yeni depolar oluşturabildim. Her şey iyi çalıştı. Git ile yaptığım gibi sorunlarla karşılaşıyorsanız, yeni sürümü temiz bir şekilde kaldırıp yeniden yüklediğinizden emin olun.


1

@ user2188765'in daha önce işaret ettiği git://gibi, deponun protokolünü değiştirmeyi deneyin http[s]://. Ayrıca bu cevaba bakınız


0

Https kullanarak proxy'de dolaştım ... bazı proxy'ler https'yi bile kontrol etmez.

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

Bu birçok kişi tarafından cevaplandı ama Bu sadece yetki ile proxy arkasında Winodws USER içindir.

Yeniden Yükleme (ilk önce başarısız oldu, Kaldırmayın).

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"

kullanıcı / geçişte özel bir karakteriniz varsa url_encode kullanın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.