So konvertieren Sie `git:` URLs in `http:` URLs

139

Ich arbeite hinter einem http-Proxy. Ich versuche, den Quellbaum von Android mit dem "Repo" -Tool zu klonen.

Dieses Tool besteht darauf, git://URLs zu verwenden, obwohl http://URLs auch funktionieren. Daher kann ich die Quelle nicht herunterladen.

Ist es möglich zu erzwingen git, immer zu verwenden http?

Bearbeiten: Mein http_proxy ist korrekt konfiguriert. Zum Beispiel funktioniert dies:

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

Dies ist jedoch nicht der Fall (errno = Zeitüberschreitung der Verbindung):

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

Also diese Antwort hilft mir nicht wirklich.

noamtm
quelle
Siehe diese vorherige Antwort .
John Paulett

Antworten:

297

Hier ist ein Beispiel für das Umschreiben des Standardprotokolls für GitHub:

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

Git-Dokumentation für url.<base>.insteadOf:

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

Jede URL, die mit diesem Wert beginnt, wird neu geschrieben, um stattdessen mit zu beginnen <base>. Wenn mehr als eine Zeichenfolge mit einer bestimmten URL übereinstimmt, wird die längste Übereinstimmung verwendet.

Tobu
quelle
19
hilft, wenn die Firewall das Git-Protokoll blockiert! :)
Wojtek Turowicz
Kann ich hier eine Frage stellen? Ich habe dies verwendet, aber "heeps" anstatt "https" geschrieben. Wie kann ich das korrigieren? Hat 'git config --global.url. github.com/.insteadOf heeps: //github.com/ 'arbeiten?
Xuxu
1
Tipp: git remote -vzeigt sofort Wirkung insteadOfund pushInsteadOfKonfiguration
Beni Cherniavsky-Paskin
Dies funktionierte für mich in öffentlichem WiFi mit blockiertem 22 Port. Wie kann die Konfiguration auf die Standardeinstellungen zurückgesetzt werden?
Yivo
14
Diese Antwort hätte es fast für mich geschafft, außer dass mein Repository ein [email protected]:...Format für die URLs verwendete. Das hat funktioniert: git config --global url."https://github.com/".insteadOf '[email protected]:'für mich.
Kraenhansen
35

Ich weiß nicht, wie dieses Repo- Tool Git verwendet (und ob Sie 'repo' für die Verwendung des http-Protokolls konfigurieren können), aber Sie können versuchen, es mithilfe der url.<base>.insteadOfKonfigurationsvariablen auszutricksen (siehe Manpages git-config und git-fetch ).

Haben Sie versucht, die core.gitProxyFirewall zu passieren, wenn dies das Problem bei der Verwendung des Git-Protokolls ist?

Jakub Narębski
quelle
2
Danke, diese "anstatt" -Variable ist genau das, was ich brauchte.
Noamtm
23

Ich hatte das gleiche Problem mit dem rekursiven Abrufen von Submodulen in einem Git-Repository. Ich bin hinter einer verrückten Firewall, die keine ausgehenden Verbindungen am Git-Port zulässt. Einige der Submodule der Submodule wurden als codiert git://github.com/blah/blah.git. Dies tötete meine rekursive Population von Submodulen. Die Problemumgehung ist folgende:

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

Dies ersetzt git:// durch https://<GITUSERNAME>@in allen Submodul-Repository-URLs ersetzt. Sie müssen durch <GITUSERNAME>Ihren eigenen Git-Benutzernamen ersetzen . Beachten Sie auch, dass das --globalerforderlich ist; Das Hinzufügen dieser Konfiguration zum Basis-Repository-Verzeichnis funktioniert nicht.

Crcastle
quelle
3
Verwenden Sie nicht nur git config --global url. "Https: //" .insteadOf git: // wie hier gezeigt? github.com/angular/angular-phonecat/issues/141 Ich meine, ist der Benutzername obligatorisch?
Αλέκος
3

Sie können überprüfen, ~/.gitconfigob Sie SSH mit https: // überschreiben oder umgekehrt.

Piperchester
quelle