Cara mengonversi `git:` url ke `http:` url


139

Saya sedang bekerja di belakang proksi http. Saya mencoba mengkloning pohon sumber Android menggunakan alat "repo" mereka.

Alat ini bersikeras menggunakan git://URL, meskipun http://URL juga berfungsi. Akibatnya, saya tidak dapat mengunduh sumbernya.

Apakah mungkin untuk memaksa gituntuk selalu menggunakan http?

Edit: http_proxy saya dikonfigurasi dengan benar. Misalnya, ini berfungsi:

git clone http://android.git.kernel.org/platform/manifest.git

Tetapi ini tidak (errno = Waktu koneksi habis):

git clone git://android.git.kernel.org/platform/manifest.git

Jadi jawaban ini tidak terlalu membantu saya.


Jawaban:


297

Berikut adalah contoh penulisan ulang protokol default untuk GitHub:

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

Dokumentasi Git untuk url.<base>.insteadOf:

git config [--global] url.<base>.insteadOf <other_url>

Setiap URL yang dimulai dengan nilai ini akan ditulis ulang untuk memulai, sebagai gantinya, dengan <base>. Saat lebih dari satu stringDari string cocok dengan URL yang diberikan, pencocokan terpanjang digunakan.


19
membantu ketika firewall memblokir protokol git! :)
Wojtek Turowicz

Bisakah saya mengajukan pertanyaan di sini? Saya menggunakan ini tetapi menulis "heeps" daripada "https". Bagaimana saya bisa memperbaikinya? Apakah git config --global.url. github.com/.insteadOf heeps: //github.com/ 'work?
Xuxu

1
Kiat: git remote -vsegera menunjukkan efek insteadOfdan pushInsteadOfkonfigurasi
Beni Cherniavsky-Paskin

Ini bekerja untuk saya di WiFi publik dengan port 22 diblokir. Bagaimana konfigurasi dapat dikembalikan ke default?
yivo

14
Jawaban ini hampir membuatnya untuk saya, kecuali repositori saya menggunakan git@github.com:...format untuk url. Ini berhasil: git config --global url."https://github.com/".insteadOf 'git@github.com:'untuk saya.
kraenhansen

35

Saya tidak tahu bagaimana alat repo ini menggunakan Git (dan jika Anda dapat mengkonfigurasi 'repo' untuk menggunakan protokol http), tetapi Anda dapat mencoba mengelabui menggunakan url.<base>.insteadOfvariabel konfigurasi (lihat manual git-config dan git-fetch ).

Sudahkah Anda mencoba menggunakan core.gitProxyuntuk melewati firewall, jika itu adalah masalah dengan menggunakan protokol git?


2
Terima kasih, variabel "malah" ini tepat seperti yang saya butuhkan.
noamtm

23

Saya punya masalah yang sama dengan mendapatkan submodul secara repositori dalam git. Saya di belakang firewall gila yang tidak memungkinkan koneksi keluar pada port git. Beberapa submodules dari submodules diberi kode sebagai git://github.com/blah/blah.git. Ini membunuh populasi submodul rekursif saya. Solusinya adalah sebagai berikut:

git config --global url."https://<GITUSERNAME>@".insteadOf git://

Ini menggantikan git://dengan https://<GITUSERNAME>@di semua URL repositori submodule. Anda perlu mengganti <GITUSERNAME>dengan nama pengguna git Anda sendiri. Juga perhatikan bahwa --globaldiperlukan; hanya menambahkan konfigurasi ini ke direktori repositori dasar tidak berfungsi.


3
Anda tidak hanya menggunakan git config --global url. "Https: //" .in gifOf git: // seperti yang ditunjukkan di sini? github.com/angular/angular-phonecat/issues/141 Maksud saya apakah nama pengguna wajib?
Αλέκος

3

Anda dapat memverifikasi ~/.gitconfigjika Anda menimpa SSH dengan https: //, atau sebaliknya.

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.