Bagaimana cara menarik dari repositori Git melalui proxy HTTP?


491

Catatan: sementara use-case yang dijelaskan adalah tentang menggunakan submodules dalam suatu proyek, hal yang sama berlaku untuk git clonerepositori normal melalui HTTP.

Saya punya proyek di bawah kendali Git. Saya ingin menambahkan submodule:

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

Tapi saya mengerti

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

Saya sudah mengatur HTTP_PROXY saya:

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

Saya bahkan memiliki pengaturan Git global untuk proksi http:

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

Adakah yang mendapat HTTP untuk bekerja secara konsisten melalui proxy? Apa yang benar-benar aneh adalah bahwa beberapa proyek pada GitHub berfungsi dengan baik ( awesome_nested_setmisalnya), tetapi yang lain secara konsisten gagal ( misalnya rel ).


Bisakah proxy Anda menyensor beberapa kata atau sesuatu, dengan demikian hanya memengaruhi repo-repo itu tempat kata-kata itu muncul sebagai bagian dari aliran byte?
pjz


4
@ alvaro, saya pikir maksud Anda Getting git untuk bekerja dengan server proxy adalah kemungkinan duplikat dari pertanyaan ini. Pertanyaan ini lebih tua dari yang Anda rujuk.
Derek Mahar

2
@ James, pengaturan Git "global" Anda untuk server proxy sebenarnya bukan global, tetapi lokal. Untuk menjadi global, Anda harus menyediakan argumen --globaluntuk git config.
Derek Mahar

1
@DerekMahar Pertanyaan yang lebih lama dapat ditutup dari duplikat pertanyaan yang lebih baru, jika pertanyaan yang lebih baru memiliki kualitas yang lebih baik (atau lebih umum berlaku).
Raedwald

Jawaban:


584

Anda juga dapat mengatur proxy HTTP yang digunakan Git di properti konfigurasi global http.proxy:

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

Untuk mengautentikasi dengan proxy:

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

(Kredit jatuh ke @EugeneKulabuhov dan @JaimeReynoso untuk format otentikasi.)


8
Ini berfungsi untuk saya: Setel HTTP_PROXY di lingkungan untuk pengguna (di Windows), lalu komentar di atas dengan $ HTTP_PROXY (huruf besar). +1 untuk solusi ini.
Sean Aitken

4
CleverCoder, pada Windows, Anda perlu menentukan% HTTP_PROXY%, bukan $ HTTP_PROXY (kecuali Anda menjalankan Cygwin, tentu saja). Saya akan mengedit jawaban saya untuk bekerja di Windows daripada di lingkungan Unix.
Derek Mahar

7
di mana saya meletakkan nama pengguna dan kata sandi untuk proxy?
Duna

26
Gunakan git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080sintaks untuk memberikan nama pengguna / kata sandi
Eugene Kulabuhov

2
Bagi siapa pun yang mungkin mengalami masalah dengan proxy, http: // <UserID>: <Password> @ <ProxyURL>: <Port> / bekerja untuk saya
Jaime Reynoso

146

Sudah ada beberapa jawaban bagus untuk ini. Namun, saya pikir saya akan ikut serta karena beberapa server proxy meminta Anda untuk mengautentikasi dengan ID pengguna dan kata sandi. Terkadang ini bisa berada di domain.

Jadi, misalnya jika konfigurasi server proxy Anda adalah sebagai berikut:

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

Kemudian, tambahkan ke .gitconfigfile Anda menggunakan perintah berikut:

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

Jangan khawatir https . Selama server proxy yang ditentukan mendukung http, dan https, maka satu entri dalam file config akan cukup.

Anda kemudian dapat memverifikasi bahwa perintah berhasil menambahkan entri ke .gitconfigfile Andacat .gitconfig :

Di akhir file Anda akan melihat entri sebagai berikut:

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

Itu dia!


Menarik. Saya bisa mendapatkan bagian "Menyelesaikan delta" dengan 100% tetapi kemudian sepertinya proses klon baru saja hang. Adakah yang mengalaminya?
Roman

1
+1. Dan segera, Anda akan dapat mengatur proxy per url!
VonC

@apoplexy dapatkah Anda mengomentari hasil edit yang disarankan agar saya dapat mempertimbangkan
Max MacLeod

3
Jika Anda memiliki simbol @ pada nama pengguna atau kata sandi Anda, maka Anda dapat menyandikan URL-nya %40dan itu akan berfungsi.
Adarsha

3
Alih-alih cat .gitconfig, Anda dapat mencantumkan pengaturan konfigurasi dengan git config --list
user3969377

125

Yang akhirnya berhasil adalah mengatur http_proxyvariabel lingkungan. Saya telah mengatur HTTP_PROXYdengan benar, tetapi git tampaknya lebih suka versi huruf kecil.


3
Apakah pengaturan http.proxydalam konfigurasi global Git berfungsi? Dalam pertanyaan Anda, Anda mengatur http.proxykonfigurasi repositori lokal.
Derek Mahar

22
Dalam kasus saya, saya harus mengaturhttps_proxy
M Smith

1
https.proxytampaknya bekerja untuk saya karena saya menggunakan https lebih dari github
Shervin Asgari

3
@ MSmith Jika Anda harus mengatur https_proxyini berarti Anda menggunakan httpsbukan httpyang pertanyaan tentang.
Piotr Dobrogost

3
Curl dan libcurl tidak mengenali HTTP_PROXY huruf besar dan HTTPS_PROXY. Lihat tautan ini untuk info lebih lanjut: curl.haxx.se/mail/archive-2001-12/0034.html
Doug

49

Sepertinya Anda menggunakan kompilasi mingw dari Git di windows (atau mungkin yang lain yang belum pernah saya dengar). Ada beberapa cara untuk men-debug ini: Saya percaya semua pekerjaan proxy http untuk git dilakukan oleh curl. Setel variabel lingkungan ini sebelum menjalankan git:

GIT_CURL_VERBOSE=1

Setidaknya ini harus memberi Anda gambaran tentang apa yang terjadi di balik layar.


7
Ketika saya menambahkan variabel lingkungan ini, msysgit tidak mencetak apa pun tambahan. :(
Andrew Arnott

setelah berkelahi dengan proxy untuk beberapa waktu, tip ini membantu saya mengetahui bahwa database cert curl hilang / kacau, dan ITULAH itu sebabnya permintaan gagal.
davenpcj

Saya telah mencari ini untuk beberapa waktu sekarang. Terima kasih.
M Smith

40

Jika Anda hanya ingin menggunakan proxy pada repositori yang ditentukan, tidak perlu pada repositori lain. Cara yang lebih disukai adalah -c, --config <key=value>opsi ketika Anda git clonerepositori. misalnya

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

Ini aneh, saya mencoba mengatur $ http_proxy, tetapi git tidak menghormatinya. Sepertinya itu hanya peduli tentang konfigurasi sendiri ...
weberc2

Bekerja Anda juga dapat menentukan --configbeberapa kali, misalnya kapan Anda juga ingin mengatur https.proxy.
barfuin

Terima kasih! Persis seperti yang saya cari
Boyang

2
klon dengan konfigurasi proxy tetapi tanpa mengubah konfigurasi proxy pengguna. Apa yang saya butuhkan! Terima kasih.
azab

26

Ketika tim jaringan Anda melakukan ssl-inspeksi dengan menulis ulang sertifikat, kemudian menggunakan url http alih-alih https, dikombinasikan dengan pengaturan var ini bekerja untuk saya.

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

2
Anda juga dapat menambahkan ini ke lingkungan untuk menerima sertifikat yang ditulis ulang yang ditawarkan oleh dudes jaringan untuk memeriksa lalu lintas Anda: ekspor GIT_SSL_NO_VERIFY = true
bbaassssiiee

Bekerja untuk saya dengan sempurna. Terima kasih. Saya baru saja menambahkan git config --global http.proxy proxy: 8081 git config --global https.proxy proxy: 8081
Sid

solusi sederhana dan cepat, +1 untuk jawaban ini.
WALKER

1
Terima kasih kepada @sethbc, @datasmid! Saya membutuhkan GIT_CURL_VERBOSE = 1 untuk melakukan debug dan GIT_SSL_NO_VERIFY = benar untuk melewati verifikasi.
Henry Rivera

tidak bekerja dengan saya. bahkan dengan GIT_SSL_NO_VERIFY var
keinabel

20

Anda juga dapat mengedit file .gitconfig yang terletak di direktori% userprofile% pada sistem Windows ( notepad% userprofile% .gitconfig ) atau dalam ~ direktori pada sistem Linux ( vi ~ / .gitconfig ) dan menambahkan bagian http seperti di bawah ini.

Konten file .gitconfig:

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

20

Bagi saya git: // tidak bekerja melalui proxy meskipun https: // tidak. Ini menyebabkan sedikit sakit kepala karena saya menjalankan skrip yang semuanya menggunakan git: // jadi saya tidak bisa dengan mudah mengubah semuanya. Namun saya menemukan GEM ini

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

Terima kasih, ini banyak membantu
dgrat

Saya tahu bahwa saya juga memiliki masalah untuk menarik dari git: //. Sudahkah Anda mempertimbangkan masalah kunci SSH? Masalah saya karena konfigurasi kunci SSH yang buruk.
avazula

17

Ini adalah pertanyaan lama tetapi jika Anda menggunakan Windows, pertimbangkan untuk mengatur HTTPS_PROXY juga jika Anda mengambil melalui URL https. Bekerja untukku!


2
Itu cukup untuk mengatur https_proxyvariabel lingkungan saja (tidak ada opsi git global atau proxy yang disetel) dalam kasus saya (msysgit pada Windows XP).
Piotr Dobrogost

13

Saya tidak menemukan http.proxyatau GIT_PROXY_COMMANDberfungsi untuk proksi http asli saya. Proxy tidak dipicu dengan cara apa pun. Tetapi saya menemukan cara untuk mengatasi ini.

  1. Pasang pembuka botol , atau alternatif lain yang Anda inginkan.
  2. Buat authfile. Format untuk authfileadalah:, user_name:passworddan user_name, passwordadalah nama pengguna dan kata sandi Anda untuk mengakses proxy Anda. Untuk membuat file tersebut, jalankan perintah seperti ini: echo "username:password" > ~/.ssh/authfile.

  3. Edit ~/.ssh/config, dan pastikan izinnya adalah 644:chmod 644 ~/.ssh/config

Ambil github.com sebagai contoh, tambahkan baris berikut ke ~/.ssh/config:

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

Sekarang, kapan pun Anda melakukan sesuatu git@github.com, itu akan menggunakan proxy secara otomatis. Anda dapat dengan mudah melakukan hal yang sama pada Bitbucket juga.

Ini tidak begitu elegan seperti pendekatan lain, tetapi bekerja seperti pesona.


1
Bisakah Anda jelaskan pada langkah 2, "buat authfile"? Sepertinya pendekatan Anda adalah satu-satunya yang akan bekerja untuk git: // url.
nik

@NikBagdon Saya menambahkan rincian lebih lanjut ke langkah 2. Biarkan saya tahu jika ada sesuatu yang tidak jelas :)
Carlosin

11

Di Windows, jika Anda tidak ingin memasukkan kata sandi di .gitconfig dalam teks biasa, Anda dapat menggunakannya

Ini mengotentikasi Anda terhadap proxy Windows NTLM normal atau bahkan dan mulai localhost-proxy tanpa otentikasi.

Untuk menjalankannya:

  • Pasang Cntml
  • Konfigurasikan Cntml sesuai dengan dokumentasi untuk meneruskan otentikasi proxy Anda
  • Arahkan git ke proksi localhost baru Anda:

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

2
Untuk apa nilainya, ini seharusnya jawaban yang diterima, dia ada di windows. Tidak ada proxy transparan (jika tidak, tidak akan ada masalah.
booyaa

9

Bagi saya apa yang berhasil adalah:

sudo apt-get install socat

Buat file di dalam $ BIN_PATH / gitproxy Anda dengan:

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

Jangan lupa untuk memberikan izin eksekusi

chmod a+x gitproxy

Jalankan perintah berikut untuk mengatur lingkungan:

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

1
Tautan ke penjelasan dan tautan ke intisari dengan pembaruan ke skrip (mini-): emilsit.net/blog/archives/…
Karl Richter

Jawaban ini adalah satu-satunya yang berfungsi untuk git://URL protokol, untuk server git (jarang) yang tidak mendukung https. Juga berfungsi di windows, dengan file batch yang sesuai dan socat untuk windows.
davenpcj

8

Atur proxy ke git

perintah

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

contoh

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

7

Set Git credential.helper ke wincred.

git config --global credential.helper wincred

Pastikan hanya ada 1 credential.helper

git config -l

Jika ada lebih dari 1 dan tidak disetel untuk menghapusnya.

git config --system --unset credential.helper

Sekarang atur proxy tanpa kata sandi.

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

Periksa bahwa semua pengaturan yang Anda tambahkan terlihat bagus ....

git config --global -l

Sekarang kamu baik-baik saja!


6

Saya memiliki masalah yang sama, dengan perbaikan yang sedikit berbeda: MEMBANGUN KEMBALI GIT DENGAN DUKUNGAN HTTP

The git:protokol tidak bekerja melalui firewall perusahaan saya.

Misalnya, waktu habis:

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

curl github.comberfungsi dengan baik, jadi saya tahu http_proxyvariabel lingkungan saya benar.

Saya mencoba menggunakan http, seperti di bawah ini, tetapi langsung mendapat kesalahan.

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

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

Saya mencoba mengkompilasi ulang git seperti ini:

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

tapi masih ada kesalahan fatal.

Akhirnya, setelah beberapa jam yang membuat frustrasi, saya membaca file configure, dan melihat ini:

# Definisikan CURLDIR = / foo / bar jika file header dan library curl Anda ada di

# / foo / bar / include dan / foo / bar / lib direktori.

Saya ingat saat itu, bahwa saya belum memenuhi curldari sumber, dan pergi mencari file header. Benar saja, mereka tidak diinstal. Itu masalahnya. Make tidak mengeluh tentang file header yang hilang. Jadi saya tidak menyadari bahwa --with-curlopsi tidak melakukan apa - apa (itu, sebenarnya default di versi sayagit ).

Saya melakukan yang berikut untuk memperbaikinya:

  1. Menambahkan tajuk yang diperlukan untuk make:

    yum install curl-devel
    (expat-devel-1.95.8-8.3.el5_5.3.i386  was already installed).
    
  2. Dihapus gitdari /usr/local(karena saya ingin instalasi baru tinggal di sana).

    Saya hanya dihapus git*dari /usr/local/sharedan/usr/local/libexec

  3. Mencari dir sertakan yang berisi file curldan expatheader, dan kemudian (karena saya telah membaca configure) menambahkan ini ke lingkungan seperti:

    export CURLDIR=/usr/include 
    export EXPATDIR=/usr/include
    
  4. Berlari configuredengan opsi-opsi berikut, yang, sekali lagi, dijelaskan dalam configurefile itu sendiri, dan juga default tetapi apa-apaan:

    ./configure  --with-curl --with-expat
    
  5. Dan sekarang httpbekerja dengan gitmelalui firewall perusahaan saya:

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

Saya senang Anda mengajukan ini, saya tidak menyadari bahwa protokol git tidak ditangani pada proxy squid saya
rupert160


5

Ini berhasil bagi saya.

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

3

kamu bisa menggunakan:

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


2

Untuk Windows

Goto -> C: / Users / user_name / gitconfig

Perbarui file gitconfig dengan detail di bawah ini

[http]

[https]

proxy = https://your_proxy:your_port

[http]

proxy = http://your_proxy:your_port

Bagaimana cara memeriksa proxy dan nomor port Anda?

Internet Explorer -> Pengaturan -> Opsi Internet -> Koneksi -> Pengaturan LAN


2

Metode di bawah ini berfungsi untuk saya:

echo 'export http_proxy=http://username:password@roxy_host:port/' >> ~/.bash_profile
echo 'export https_proxy=http://username:password@roxy_host:port' >> ~/.bash_profile
  • Catatan Zsh: Ubah file ~ / .zshenv Anda alih-alih ~ / .bash_profile.
  • Ubuntu dan Fedora note: Ubah file ~ / .bashrc Anda daripada ~ / .bash_profile.

2

Layak untuk disebutkan: Sebagian besar contoh di internet menunjukkan contoh suka

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

Jadi tampaknya, bahwa - jika proxy Anda memerlukan otentikasi - Anda harus melakukannya meninggalkan kata sandi perusahaan Anda di git-config. Yang tidak terlalu keren.

Tetapi, jika Anda hanya mengkonfigurasi pengguna tanpa kata sandi:

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

Git tampaknya (setidaknya pada mesin Windows saya tanpa bantuan kredensial) untuk mengenalinya dan meminta kata sandi proksi pada akses-repo.


Anda adalah lelaki saya, karena nama pengguna dan kata sandi perusahaan saya juga memiliki begitu banyak lubang khusus yang sangat tidak mungkin untuk dikodekan dan dilalui. Dengan "escamotage" ini, saya dapat memberikan kata sandi pada wajah tiruan atau langkah selanjutnya lainnya setelah menetapkan alamat proxy.
Carmine Tambascia

1

Ini bukan masalah dengan proxy Anda. Ini masalah dengan github (atau git). Gagal bagi saya di git-1.6.0.1 di linux juga. Bug sudah dilaporkan (oleh Anda tidak kurang).

Pastikan untuk menghapus pasties Anda, mereka sudah di google. Sunting: Pasti bermimpi, saya kira Anda tidak dapat menghapusnya. Gunakan Gist saja?


Saya diposting ke github dan msysGit juga b / c Saya tidak yakin di mana masalahnya. Sepertinya saya tidak bisa menghapus pasties.
James A. Rosen


1

Jawaban di atas berfungsi untuk saya ketika proxy saya tidak perlu otentikasi. Jika Anda menggunakan proxy yang mengharuskan Anda untuk mengotentikasi, Anda dapat mencoba CCProxy. Saya punya tutorial kecil tentang cara mengaturnya di sini,

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

Saya bisa mendorong, menarik, membuat repo baru. Semuanya bekerja dengan baik. Pastikan Anda melakukan uninstall dan instal ulang versi baru jika Anda menghadapi masalah dengan Git seperti yang saya lakukan.


1

sebagai @ user2188765 telah tunjukkan, coba ganti git://protokol repositori dengan http[s]://. Lihat juga jawaban ini


0

Saya menggunakan proxy menggunakan https ... beberapa proxy bahkan tidak memeriksa 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

Karena ini dijawab oleh banyak orang tetapi ini hanya untuk Winodws USER yang berada di belakang proxy dengan auth.

Menginstal ulang (pertama gagal, Jangan hapus).

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"

jika Anda memiliki karakter khusus di pengguna / pass gunakan url_encode

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.