Cómo convertir urls `git:` a `http:` urls

139

Estoy trabajando detrás de un proxy http. Estoy tratando de clonar el árbol fuente de Android usando su herramienta "repositorio".

Esta herramienta insiste en usar git://URL, aunque las http://URL también funcionan. Como resultado, no puedo descargar la fuente.

¿Es posible forzar gita usar siempre http?

Editar: mi http_proxy está configurado correctamente. Por ejemplo, esto funciona:

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

Pero esto no (errno = Tiempo de conexión agotado):

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

Entonces esta respuesta realmente no me ayuda.

noamtm
fuente
Ver esta respuesta anterior .
John Paulett

Respuestas:

297

Aquí hay un ejemplo de reescritura del protocolo predeterminado para GitHub:

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

Documentación de Git para url.<base>.insteadOf:

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

Cualquier URL que comience con este valor se reescribirá para comenzar, en su lugar, con <base>. Cuando más de una de las cadenas coinciden con una URL determinada, se utiliza la coincidencia más larga.

Tobu
fuente
19
ayuda cuando el firewall bloquea el protocolo git! :)
Wojtek Turowicz
¿Puedo hacer una pregunta aquí? Estaba usando esto pero escribí "heeps" en lugar de "https". ¿Cómo puedo corregir esto? ¿Tiene 'git config --global.url.github.com/.insteadDe heeps: //github.com/ 'work?
Xuxu
1
Consejo: git remote -vmuestra inmediatamente el efecto insteadOfy las pushInsteadOfconfiguraciones
Beni Cherniavsky-Paskin
Esto funcionó para mí en WiFi público con 22 puertos bloqueados. ¿Cómo se puede revertir la configuración a los valores predeterminados?
yivo
14
Esta respuesta casi lo hizo para mí, excepto que mi repositorio estaba usando un [email protected]:...formato para las URL. Esto funcionó: git config --global url."https://github.com/".insteadOf '[email protected]:'para mí.
kraenhansen
35

No sé cómo esta herramienta de repositorio usa Git (y si puede configurar 'repo' para usar el protocolo http), pero puede intentar engañarlo usando la url.<base>.insteadOfvariable de configuración (consulte las páginas de manual de git-config y git-fetch ).

¿Has intentado usar core.gitProxypara pasar a través del firewall, si es el problema con el uso del protocolo git?

Jakub Narębski
fuente
2
Gracias, esta variable "en lugar de" es exactamente lo que necesitaba.
noamtm
23

Tuve este mismo problema con obtener submódulos de forma recursiva en un repositorio git. Estoy detrás de un firewall loco que no permite conexiones salientes en el puerto git. Algunos de los submódulos de los submódulos se codificaron como git://github.com/blah/blah.git. Esto mató a mi población recursiva de submódulos. La solución es la siguiente:

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

Esto reemplaza git://con https://<GITUSERNAME>@en todos los URL de repositorio de submódulos. Debe reemplazarlo <GITUSERNAME>con su propio nombre de usuario git. También tenga en cuenta que --globalse requiere; simplemente agregar esta configuración al directorio del repositorio base no funciona.

Crcastle
fuente
3
Y no solo use git config --global url. "Https: //" .insteadOf git: // como se muestra aquí? github.com/angular/angular-phonecat/issues/141 Quiero decir, ¿es obligatorio el nombre de usuario?
Αλέκος
3

Puede verificar ~/.gitconfigsi está sobrescribiendo SSH con https: // o viceversa.

Piperchester
fuente