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.

noamtm
sumber
Lihat jawaban ini sebelumnya .
John Paulett

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.

Tobu
sumber
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 [email protected]:...format untuk url. Ini berhasil: git config --global url."https://github.com/".insteadOf '[email protected]:'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?

Jakub Narębski
sumber
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.

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

piperchester
sumber