Comment convertir des URL `git:` en URL `http:`

139

Je travaille derrière un proxy http. J'essaye de cloner l'arborescence des sources d'Android en utilisant leur outil "repo".

Cet outil insiste sur l'utilisation des git://URL, même si les http://URL fonctionnent également. Par conséquent, je ne peux pas télécharger la source.

Est-il possible de forcer gità toujours utiliser http?

Edit: mon http_proxy est configuré correctement. Par exemple, cela fonctionne:

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

Mais ce n'est pas le cas (errno = connexion expirée):

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

Donc cette réponse ne m'aide pas vraiment.

noamtm
la source
Voir cette réponse précédente .
John Paulett

Réponses:

297

Voici un exemple de réécriture du protocole par défaut pour GitHub:

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

Documentation Git pour url.<base>.insteadOf:

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

Toute URL commençant par cette valeur sera réécrite pour commencer, à la place, par <base>. Lorsque plusieurs chaînes de placeOf correspondent à une URL donnée, la correspondance la plus longue est utilisée.

Tobu
la source
19
aide lorsque le pare-feu bloque le protocole git! :)
Wojtek Turowicz
Puis-je poser une question ici? J'utilisais ceci mais j'ai écrit "heeps" plutôt que "https". Comment puis-je corriger cela? Est-ce que 'git config --global.url. github.com/.insteadOf heeps: //github.com/ 'fonctionne?
Xuxu
1
Astuce: git remote -vmontre immédiatement l'effet insteadOfet les pushInsteadOfconfigurations
Beni Cherniavsky-Paskin
Cela a fonctionné pour moi dans le WiFi public avec le port 22 bloqué. Comment la configuration peut-elle être rétablie par défaut?
yivo
14
Cette réponse l'a presque fait pour moi, sauf que mon référentiel utilisait un [email protected]:...format pour les URL. Cela a fonctionné: git config --global url."https://github.com/".insteadOf '[email protected]:'pour moi.
kraenhansen
35

Je ne sais pas comment cet outil de dépôt utilise Git (et si vous pouvez configurer 'repo' pour utiliser le protocole http), mais vous pouvez essayer de le tromper en utilisant la url.<base>.insteadOfvariable de configuration (voir les pages de manuel git-config et git-fetch ).

Avez-vous essayé d'utiliser core.gitProxypour passer à travers le pare-feu, si c'est le problème avec l'utilisation du protocole git?

Jakub Narębski
la source
2
Merci, cette variable "insteadOf" est exactement ce dont j'avais besoin.
noamtm
23

J'ai eu le même problème avec l'obtention récursive de sous-modules dans un référentiel git. Je suis derrière un pare-feu fou qui n'autorise pas les connexions sortantes sur le port git. Certains des sous-modules des sous-modules ont été codés comme git://github.com/blah/blah.git. Cela a tué ma population récursive de sous-modules. La solution de contournement est la suivante:

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

Cela remplace git://par https://<GITUSERNAME>@dans toutes les URL de référentiel de sous-modules. Vous devez le remplacer <GITUSERNAME>par votre propre nom d'utilisateur git. Notez également que le --globalest obligatoire; l'ajout de cette configuration au répertoire du référentiel de base ne fonctionne pas.

Crcastle
la source
3
N'utilisez pas simplement git config --global url. "Https: //" .insteadOf git: // comme indiqué ici? github.com/angular/angular-phonecat/issues/141 Je veux dire, le nom d'utilisateur est-il obligatoire?
Αλέκος
3

Vous pouvez vérifier ~/.gitconfigsi vous écrasez SSH par https: //, ou vice versa.

piperchester
la source