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?


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


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:proxypwd@proxy.server.com: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

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:proxypwd@proxy.server.com:8080
$ git config --system http.sslcainfo /bin/curl-ca-bundle.crt
$ git remote add origin https://mygithubuser:mygithubpwd@github.com/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


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


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:password@proxy.at.your.org: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.


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

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

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:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[https]
    proxy = http://YOUR_PROXY_USERNAME:YOUR_PROXY_PASSWORD@YOUR.PROXY.SERVER:YOUR.PROXY.SERVER.PORT
    sslverify = false
[url "http://github.com/"]
    insteadOf = git://github.com/

[user]
    name = Arpit Aggarwal
    email = aggarwalarpit.89@gmail.com

12

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

[http]
    proxy = http://proxy:8080
[https]
    proxy = http://proxy:8080
[url "https://"]
    insteadOf = git://

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.


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, git@github.com:<user name>/<project name>.git):

git clone git@github.com:<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)


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 sandi@proxy.example.org]

Jika server proxy menggunakan port selain 80, sertakan nomor port: http_proxy = http: // [nama pengguna: password@proxy.example.org: 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

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:proxypwd@proxy.server.com:8080

Bagaimanapun, investigasi dapat dibantu dengan menambahkan log CURL:

export GIT_CURL_VERBOSE=1

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


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

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>

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:proxypwd@proxy.server.com: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:proxypwd@proxy.server.com:8080
sslverify = false
[https]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
sslverify = false

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://username@proxy.example.com:PortNumber 

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


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: proxypwd@proxy.server.com: 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.


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