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.

noamtm
źródło
Zobacz tę poprzednią odpowiedź .
John Paulett

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.

Tobu
źródło
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 [email protected]:...formatu adresów URL. To zadziałało: git config --global url."https://github.com/".insteadOf '[email protected]:'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?

Jakub Narębski
źródło
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.

crcastle
źródło
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.

piperchester
źródło