Jak przekonwertować adresy URL `git:` na adresy URL `http:`


139

Pracuję za proxy http. Próbuję sklonować drzewo źródłowe Androida przy użyciu ich narzędzia „repo”.

To narzędzie nalega na używanie git://adresów URL, mimo że http://adresy URL również działają. W rezultacie nie mogę pobrać źródła.

Czy można wymusić, gitaby zawsze używać http?

Edycja: mój serwer http_proxy jest poprawnie skonfigurowany. Na przykład to działa:

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

Ale to nie działa (errno = Przekroczono limit czasu połączenia):

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

Więc ta odpowiedź tak naprawdę mi nie pomaga.


Odpowiedzi:


297

Oto przykład przepisania domyślnego protokołu dla GitHub:

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

Dokumentacja Git dla url.<base>.insteadOf:

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

Każdy adres URL, który zaczyna się od tej wartości, zostanie przepisany tak, aby zaczynał się od <base>. Jeśli do danego adresu URL pasuje więcej niż jeden ciąg zamiast tego, używane jest najdłuższe dopasowanie.


19
pomaga, gdy zapora blokuje protokół git! :)
Wojtek Turowicz

Czy mogę tutaj zadać pytanie? Używałem tego, ale napisałem „heeps” zamiast „https”. Jak mogę to poprawić? Czy 'git config --global.url. github.com/.insteadOf heeps: //github.com/ 'work?
Xuxu

1
Wskazówka: git remote -vnatychmiast pokazuje efekt insteadOfi pushInsteadOfconfigs
Beni Cherniavsky-Paskin

To zadziałało dla mnie w publicznym WiFi z zablokowanym portem 22. Jak można przywrócić konfigurację do wartości domyślnych?
yivo

14
Ta odpowiedź prawie mi się przydała, z wyjątkiem tego, że moje repozytorium używało git@github.com:...formatu adresów URL. To zadziałało: git config --global url."https://github.com/".insteadOf 'git@github.com:'dla mnie.
kraenhansen

35

Nie wiem, w jaki sposób to narzędzie repozytorium korzysta z Gita (i czy możesz skonfigurować 'repo' tak, aby używał protokołu http), ale możesz spróbować oszukać go za pomocą url.<base>.insteadOfzmiennej konfiguracyjnej (zobacz strony podręcznika git-config i git-fetch ).

Czy próbowałeś użyć core.gitProxydo przejścia przez firewall, jeśli jest to problem z użyciem protokołu git?


2
Dzięki, ta zmienna „zamiast” jest dokładnie tym, czego potrzebowałem.
noamtm

23

Miałem ten sam problem z rekurencyjnym pobieraniem modułów podrzędnych w repozytorium git. Jestem za szaloną zaporą ogniową, która nie zezwala na połączenia wychodzące na porcie git. Niektóre z podmodułów podmodułów zostały zakodowane jako git://github.com/blah/blah.git. To zabiło moją rekurencyjną populację podmodułów. Sposób obejścia jest następujący:

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

Zastępuje git://ze https://<GITUSERNAME>@wszystkich adresów URL repozytorium modułem. Musisz zastąpić <GITUSERNAME>własną nazwą użytkownika git. Pamiętaj również, że --globaljest wymagany; samo dodanie tej konfiguracji do katalogu podstawowego repozytorium nie działa.


3
Nie używaj tylko git config --global url. „Https: //” .insteadOf git: //, jak pokazano tutaj? github.com/angular/angular-phonecat/issues/141 To znaczy, czy nazwa użytkownika jest obowiązkowa?
Αλέκος

3

Możesz sprawdzić, ~/.gitconfigczy nadpisujesz SSH za pomocą https: // lub odwrotnie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.