Membuat Git bekerja dengan server proxy - gagal dengan “Permintaan habis waktu”

918

Bagaimana saya membuat Git menggunakan server proxy?

Saya perlu memeriksa kode dari server Git, tetapi ini menunjukkan "Permintaan habis waktu" setiap kali. Bagaimana saya mengatasi ini?

Atau, bagaimana saya bisa mengatur server proxy?

PlagueHammer
sumber
Bukankah ini item konfigurasi klien git? Satu-satunya aspek dari ini yang sepertinya melibatkan cmd.exe adalah bahwa klien git memungkinkan Anda untuk menentukan proxy dalam variabel lingkungan.
Michael Burr
Saya telah mengedit pertanyaan asli untuk menghapus semua referensi Windows, karena masalah ini khusus git.
PlagueHammer
3
Perhatikan bahwa Anda dapat melakukan pengaturan proxy per git repo url!
VonC
1
Pertanyaan ini sangat mirip dengan " Bagaimana cara menarik dari repositori Git melalui proxy HTTP?" .
Derek Mahar
3
Sebagian besar jawaban dalam pertanyaan ini tentang proksi HTTP. Jika Anda memiliki proxy SOCKS, lihat pertanyaan ini untuk HTTP / S protokol dan yang satu ini untuk git: // protokol.
pengguna

Jawaban:

1634

Perintah untuk menggunakan:

git config --global http.proxy http://proxyuser:[email protected]:8080
  • ubah proxyuserke pengguna proxy Anda
  • ubah proxypwdkata sandi proxy Anda
  • ubah proxy.server.comke URL server proxy Anda
  • ubah 8080ke port proxy yang dikonfigurasi di server proxy Anda

Perhatikan bahwa ini berfungsi untuk repos http dan https.

Jika Anda memutuskan kapan saja untuk mengatur ulang proxy ini dan bekerja tanpa proxy:

Perintah untuk menggunakan:

git config --global --unset http.proxy

Akhirnya, untuk memeriksa proxy yang saat ini ditetapkan:

git config --global --get http.proxy
Salim Hamidi
sumber
15
Terima kasih salim. Milik saya berfungsi tanpa proxyuser: proxypwd di URL.
Kwex
11
Terima kasih kawan Bagi saya itu adalah otentikasi berbasis NTLM dan hanya memperbarui .gitconfig saya tidak berfungsi :(. Jadi saya harus mendapatkan CNTLM yang menggunakan authetikasi NTLM. Yang harus saya lakukan hanyalah mengarahkan CNTLM saya ke server proxy jaringan saya dan kemudian arahkan perangkat lunak saya perbarui manajer (seperti yum, apt-get atau ssh) ke proksi lokal. Dalam kasus operasi git seperti klon, tarik http.proxy adalah proksi saya yang dikonfigurasi secara lokal dengan server lokal.
Mayur Nagekar
9
Halo, bagaimana saya bisa mengatur proxypass jika memiliki karakter "@"? Saya tahu saya harus menilai karakter ini tetapi saya tidak tahu caranya .. Terima kasih
patricK
13
@patricK Anda dapat menggunakan %40sebagai pengganti untuk @string nama pengguna / kata sandi, meskipun saya belum mengujinya sendiri. Semoga ini bisa membantu. :-)
Sourav Ghosh
14
@patricK Saya dapat mengonfirmasi bahwa menggunakan% 40 sebagai pengganti @ works. Tampaknya jika karakter khusus tidak berfungsi, Anda harus mencoba penyandian URL. Penyandiannya ditemukan di sini: w3schools.com/tags/ref_urlencode.asp
Jon
133

Ini bekerja untuk saya, di windows XP di belakang firewall perusahaan.

Saya tidak perlu menginstal proxy lokal atau perangkat lunak lain selain git v1.771 dari 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

pengguna proxy = pengguna proxy yang ditugaskan oleh departemen TI kami, dalam kasus saya ini adalah pengguna windows yang sama yang saya gunakan untuk masuk ke PC saya, pengguna Active Directory

proxypwd = kata sandi pengguna proxy saya

proxy.server.com:8080 = nama dan port proxy, saya mendapatkannya dari Control Panel, Opsi Internet, Koneksi, tombol Pengaturan Lan, tombol Advanced di dalam bagian Server Proxy, gunakan nama server dan port pada baris (http) pertama .

mygithubuser = pengguna yang saya gunakan untuk masuk ke github.com

mygithubpwd = kata sandi untuk pengguna github.com saya

repoUser = pemilik pengguna repo

repoName = nama repo

alvaro
sumber
2
Hore, terima kasih! git config --global http.sslcainfo MY_NEW_CERTS_BUNDLE.crtditambah sertifikat yang diunduh seperti dijelaskan dalam simplicidade.org/notes/archives/2011/06/… (terima kasih kepada: stackoverflow.com/a/7206627/98528 ) melakukannya untuk saya!
aliasvel
3
Tampaknya bekerja untuk saya, tetapi git masih tidak berfungsi ketika saya memintanya untuk mengkloning repositori menggunakan git://protokol.
Ajedi32
3
Beberapa klarifikasi untuk informasi pablolic, berdasarkan apa yang bekerja untuk saya: 1) Jika proxyuser adalah login Windows, tinggalkan domain AD, cukup sertakan nama pengguna tanpa domain; 2) Spasi dalam proxypwd harus dikodekan sebagai "+". mis. "Kata Sandi Saya" harus dimasukkan sebagai "Kata Sandi Saya".
Simon Tewsi
2
@ EdmundYeung99: Saya sarankan mengganti simbol @ dengan% 40. Belum mencobanya tapi saya percaya itu adalah penyandian URL standar.
Simon Tewsi
2
@demongolem: Saya menduga Anda mungkin perlu menyandikan URL kata sandi Anda (belum mencobanya, ini hanya tebakan yang terpelajar). Lihat kolom UrlEncoded pada tabel di jawaban berikut: stackoverflow.com/a/11236038/216440 Dalam kasus Anda itu berarti mengganti $ dengan% 24.
Simon Tewsi
52

Setel variabel sistem yang dinamai http_proxydengan nilai ProxyServer:Port. Itu adalah solusi paling sederhana. Masing-masing, gunakan https_proxyseperti yang ditunjukkan daefu dalam komentar.

Pengaturan gitproxy (seperti sleske menyebutkan) adalah pilihan lain, tetapi itu membutuhkan "perintah", yang tidak semudah solusi di atas.

Referensi: http://bardofschool.blogspot.com/2008/11/use-git-behind-proxy.html

PlagueHammer
sumber
10
Atau gunakan 'https_proxy' jika Anda terhubung ke repositori https.
daefu
1
@daefu: Tidak yakin apakah Anda perlu mengatur https_proxy. Saya terhubung ke repositori https dan mengikuti langkah pertama instruksi pablolic (yaitu menambahkan http.proxy ke file konfigurasi git). Itu yang saya butuhkan.
Simon Tewsi
3
https_proxy diperlukan untuk saya. Pengaturan hanya http_proxy tidak memungkinkan untuk mengkloning repo HTTPS
explunit
@daefu +1 ini juga berfungsi dengan janda github - pertanyaan terkait: stackoverflow.com/questions/16216176/…
blue-sky
4
@SimonTewsi @explunit Sementara pengaturan variabel lingkungan http_proxydiperlukan untuk URL HTTP dan https_proxydiperlukan untuk URL HTTPS. Atau, seseorang bisa mengatur all_proxyuntuk semua URL. Lihat ENVIRONMENTbagian dalam ikal (1) . Namun, saat mengatur opsi git-config, http.proxydigunakan untuk URL HTTP dan HTTPS. Lihat http.proxydi git-config (1) .
Susam Pal
43

Jika cara baris perintah untuk mengonfigurasi server proxy Anda tidak berfungsi, Anda mungkin dapat mengedit .gitconfig (di root profil Anda, yang mungkin menyembunyikan keduanya di C: \ Documents and Settings dan pada beberapa drive jaringan) dan tambahkan ini :

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

YMMV, ini hanya mencakup langkah pertama dari konfigurasi baris perintah. Anda mungkin harus mengedit konfigurasi sistem git juga dan saya tidak tahu di mana mereka menyembunyikannya.

Randakar
sumber
1
"Anda mungkin harus mengedit konfigurasi sistem git juga". Tidak, biasanya tidak. Konfigurasi sistem dan pengguna digabungkan; pengaturan proxy di salah satu dari dua harus cukup.
sleske
Dalam kasus saya ini terletak di mesin Windows saya di [git home] \ etc \ gitconfig - setelah diedit berfungsi seperti pesona!
Barmaley Red Star
Ini sangat berguna jika baris perintah tidak menyukai kata sandi Anda karena karakter khusus.
Asal
37

Sebagai alternatif untuk menggunakan git config --global http.proxy address:port, Anda dapat mengatur proxy di baris perintah:

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

Keuntungannya adalah proxy tidak diset secara terus-menerus. Di bawah Bash Anda mungkin menetapkan alias:

alias git-proxy='git -c "http.proxy=address:port"'
Steve Pitchers
sumber
22

Jika Anda menggunakan ubuntu, maka lakukan hal berikut ...

Langkah 1: Instal pembuka botol

$ sudo apt-get install corkscrew

Langkah 2: Tulis skrip bernama git-proxy.sh dan tambahkan berikut ini

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

Langkah 3: Buat skrip dapat dieksekusi

$ chmod +x git-proxy.sh

Langkah 4: Siapkan perintah proxy untuk GIT dengan mengatur variabel lingkungan

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

Sekarang gunakan perintah git, seperti

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Sk Hasanujjaman
sumber
Anda mungkin harus menggunakan "$@"sebagai gantinya $*. Lihat manual shell Anda untuk lebih jelasnya.
Hynek -Pichi- Vychodil
15

Menghadapi masalah yang sama karena beberapa .gitconfigfile di windows, ikuti langkah-langkah di bawah ini untuk memperbaiki yang sama:

Langkah 1: Buka Git BASH

Langkah 2: Cari .gitconfig, jalankan perintah berikut:

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

Langkah 3: Salin konten di bawah ini di .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
sumber
12

Coba letakkan yang berikut ini ke file ~ / .gitconfig:

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://
augustocbx
sumber
1
Saya mencoba semua hal di atas. Baru setelah saya menambahkan entri https yang tercantum di sini saya dapat bekerja.
Brent Fisher
11

Untuk protokol git (git: // ...), instal socat dan tulis skrip seperti:

#!/bin/sh

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

membuatnya dapat dieksekusi, letakkan di jalur Anda, dan di ~/.gitconfigset Anda core.gitproxydengan nama skrip itu.

ashutosh
sumber
Bekerja untuk windows dengan SOCAT cygwin juga. menggunakansocat STDIO PROXY:%proxy%:%1:%2,proxyport=%PROXYPORT%
davenpcj
1
Dapat digunakan set GIT_PROXY_COMMAND=path\to\scriptuntuk membuat GIT menggunakan proxy tanpa mengacaukan konfigurasi git.
davenpcj
Iya! Akhirnya petunjuk yang tepat! Saya juga membutuhkan otentikasi: exec socat STDIO PROXY: <proxy>: $ 1: $ 2, proxyport = <port>, proxyauth = <user>: <passwd> Ditemukan di sini: gist.github.com/sit/49288
Joachim
11

Ada sesuatu yang saya perhatikan dan ingin saya bagikan di sini:

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

Metode di atas tidak akan berfungsi untuk ssh URL (yaitu, [email protected]:<user name>/<project name>.git):

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

Dan hal-hal tidak akan berubah jika kita menetapkan SSH di atas port HTTPS ( https://help.github.com/en/articles/using-ssh-over-the-https-port ) karena hanya mengubah port (22 secara default) ) koneksi ssh terhubung ke.

(Bukan penutur asli bahasa Inggris, harap perbaiki kata-kata saya jika perlu)

miáo
sumber
7

Saya bekerja pada Windows XP di tempat kerja (negara bagian / gov), jadi saya melakukan penelitian dan menemukan ini di sini dan itu berhasil untuk saya. Semoga ini membantu :)

Variabel Lingkungan http_proxy

Jika Anda menggunakan server proxy atau firewall, Anda mungkin perlu mengatur variabel lingkungan http_proxy untuk mengakses beberapa url dari commandline. Contoh: Menginstal ppm untuk perl atau menerapkan rpm di linux, memperbarui ubuntu

Setel variabel http_proxy dengan nama host atau alamat IP dari server proxy: http_proxy = http: // [proxy.example.org]

Jika server proksi memerlukan nama pengguna dan kata sandi, masukkan mereka dalam bentuk berikut: http_proxy = http: // [nama pengguna: kata [email protected]]

Jika server proxy menggunakan port selain 80, sertakan nomor port: http_proxy = http: // [nama pengguna: [email protected]: 8080]

Windows XP

  1. Buka Control Panel dan klik ikon System.
  2. Pada tab Lanjut, klik pada Variabel Lingkungan.
  3. Klik Baru di panel variabel Sistem.
  4. Tambahkan http_proxy dengan informasi proxy yang sesuai (lihat contoh di atas).

Linux, Solaris atau HP-UX

Setel variabel lingkungan http_proxy menggunakan perintah khusus untuk shell Anda (mis. Set atau ekspor). Untuk membuat perubahan ini terus-menerus, tambahkan perintah ke file profil yang sesuai untuk shell. Misalnya, di bash, tambahkan baris seperti berikut ke file .bash_profile atau .bashrc Anda:

  1. http_proxy = http: // [nama pengguna: kata sandi @ hostname: port];
  2. ekspor $ http_proxy
Shak Daniel
sumber
tanx -> :) C: \ Users \ AT> echo% https_proxy% 172.20.4.55:808
qasem
7

Sebagai tambahan dari jawaban-jawaban ini, saya merasa terbantu untuk mempertimbangkan 2 poin ini:

Seseorang mungkin perlu menegakkan skema otentikasi:

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

Juga, biasanya dengan skema otentikasi NTLM, seseorang mungkin perlu memberikan secara eksplisit domain AD.

Dalam git bash:

echo %userdomain%

Dan perbarui http.proxy sesuai:

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

Bagaimanapun, investigasi dapat dibantu dengan menambahkan log CURL:

export GIT_CURL_VERBOSE=1
blacelle
sumber
Saya perlu menambahkan proxyAuthMethod menggunakan git config --global http.proxyAuthMethod basic. Git gersion 2.8.3 tidak mengirim otentikasi apa pun hingga saya menetapkan parameter konfigurasi ini.
HeatfanJohn
5

Jika Anda memiliki tsocks atau rantai proxy diinstal dan dikonfigurasi, Anda bisa

$ tsocks git clone <you_repository>

atau

$ proxychains git clone <you_repository>

untuk membuatnya lebih pendek, saya membuat link simbol /usr/bin/puntuk proxychains, sehingga saya dapat menggunakannya seperti ini

p git clone <you_repository>

dan saya bisa menggunakannya untuk mem-proxy perintah apa saja,

p <cmd-need-be-proxied>

Ngomong- ngomong, proxychains tidak diperbarui untuk waktu yang lama, Anda mungkin ingin mencoba proxychians-ng

Fangxing
sumber
4

Mengatur git proxy di terminal

jika

  • Anda tidak ingin mengatur proxy untuk setiap proyek git Anda secara manual, satu per satu
  • selalu ingin menggunakan proxy yang sama untuk semua proyek Anda

Atur secara global sekali

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

jika Anda ingin menetapkan proxy hanya untuk satu proyek git (mungkin ada beberapa situasi di mana Anda mungkin tidak ingin menggunakan proxy yang sama atau proxy apa pun sama sekali untuk beberapa koneksi 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

jika Anda ingin menampilkan pengaturan proxy saat ini

git config --list 

jika Anda ingin menghapus proxy secara global

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

jika Anda ingin menghapus proxy hanya untuk satu root git

//go to project root
cd /bla-bla/project_root
git config --unset http.proxy
git config --unset https.proxy
Add080bbA
sumber
3

di sini adalah pengaturan proxy

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>
hannad rehman
sumber
3

Saya mengikuti sebagian besar jawaban yang direkomendasikan di sini. Pertama saya mendapat kesalahan berikut:

fatal: tidak dapat mengakses ' https://github.com/folder/sample.git/ ': schannel: next InitializeSecurityContext gagal: Kesalahan tidak dikenal (0x80092012) - Fungsi pencabutan tidak dapat memeriksa pencabutan sertifikat.

Kemudian saya sudah mencoba perintah berikut oleh @Salim Hamidi

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

Tapi saya mendapat kesalahan berikut:

fatal: tidak dapat mengakses ' https://github.com/folder/sample.git/ ': Menerima kode HTTP 407 dari proksi setelah CONNECT

Ini bisa terjadi jika server proxy tidak dapat memverifikasi sertifikat SSL. Jadi kami ingin memastikan bahwa verifikasi ssl tidak aktif (tidak disarankan untuk situs yang tidak tepercaya), jadi saya telah melakukan langkah-langkah berikut yang direkomendasikan oleh @Arpit tetapi dengan sedikit perubahan:

1.Pertama kali pastikan untuk menghapus pengaturan proxy sebelumnya:

git config --global --unset http.proxy

2.Lalu daftar dan dapatkan konten gitconfig

git config --list --show-origin

3. Terakhir perbarui konten file gitconfig seperti di bawah ini:

[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
sumber
3

Saya telah mencoba semua jawaban di atas dan tidak ada yang berhasil untuk saya, karena ada masalah penyandian kata sandi proxy.

Perintah ini berhasil:

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

Jangan masukkan kata sandi dalam perintah Anda. Itu akan secara dinamis meminta ketika Anda mencoba terhubung ke repo git.

Ishtdeep Hora
sumber
Terima kasih, ini berhasil untuk saya. Meskipun pengaturan git config harus http.proxy
ochhii
nama pengguna tidak cukup. Kata sandi juga diperlukan.
Dinith
gunakan kode ini {git config --global http.proxy proxyuser: [email protected]: 8080 }
Dinith
2

Untuk pengguna windows: jika git configatau set http_proxy=tidak berfungsi, jawaban ini dapat membantu:

ganti git://protokol repositori git dengan http://. Catatan, Anda harus mengatur yang http_proxypertama.

DomTomCat
sumber
0

Setelah tanpa lelah mencoba setiap solusi di halaman ini, pekerjaan saya adalah menggunakan dan kunci SSH!

  1. Buka Git Bash
  2. $ ssh-keygen.exe -t rsa -C
  3. Buka penyedia Git Anda (Github, Bitbucket, dll.)
  4. Tambahkan salin konten file id_rsa.pub ke halaman input penyedia Git (periksa profil Anda)
Janac Meena
sumber