Si este es un problema con su firewall bloqueando el puerto git: protocol (9418), entonces debe hacer un cambio más persistente para que no tenga que acordarse de emitir comandos sugeridos por otras publicaciones para cada repositorio git.
La siguiente solución también funciona para submódulos que también podrían estar usando el protocolo git:.
Dado que el mensaje git realmente no apunta inmediatamente al firewall que bloquea el puerto 9418, intentemos diagnosticar esto como el problema real.
Diagnosticando el problema
Referencias: https://superuser.com/q/621870/203918 y https://unix.stackexchange.com/q/11756/57414
Hay varias herramientas que podemos usar para determinar si el firewall está causando nuestro problema: use la que esté instalada en su sistema.
# Using nmap
# A state of "filtered" against port 9418 (git) means
# that traffic is being filtered by a firewall
$ nmap github.com -p http,git
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT
Nmap scan report for github.com (192.30.252.131)
Host is up (0.24s latency).
PORT STATE SERVICE
80/tcp open http
9418/tcp filtered git
# Using Netcat:
# Returns 0 if the git protocol port IS NOT blocked
# Returns 1 if the git protocol port IS blocked
$ nc github.com 9418 < /dev/null; echo $?
1
# Using CURL
# Returns an exit code of (7) if the git protocol port IS blocked
# Returns no output if the git protocol port IS NOT blocked
$ curl http://github.com:9418
curl: (7) couldn't connect to host
Bien, ahora que hemos determinado que nuestro firewall está bloqueado por un firewall, ¿qué podemos hacer al respecto? Sigue leyendo :)
Reescritura básica de URL
Git proporciona una forma de reescribir URL usando git config
. Simplemente emita el siguiente comando:
git config --global url."https://".insteadOf git://
Ahora, como por arte de magia, todos los comandos git realizarán una sustitución de git://
ahttps://
¿Qué cambios hizo este comando?
Eche un vistazo a su configuración global utilizando:
git config --list
Verá la siguiente línea en la salida:
url.https://.insteadof=git://
Puede ver cómo se ve esto en el archivo, echando un vistazo a ~/.gitconfig
dónde debería ver ahora que se han agregado las siguientes dos líneas:
[url "https://"]
insteadOf = git://
¿Quieres más control?
Simplemente use una URL más completa / específica en el reemplazo. Por ejemplo, para que solo las URL de GitHub usen https: // en lugar de git: //, puede usar algo como:
git config --global url."https://github".insteadOf git://github
Puede ejecutar este comando varias veces utilizando diferentes reemplazos. Sin embargo, en el caso de que una URL coincida con múltiples reemplazos, la coincidencia más larga "gana". Solo se realizará un reemplazo por URL.
Cambios en todo el sistema para administradores de sistemas
Si eres un administrador de sistemas Linux y no quieres que tus usuarios tengan que pasar por los dolores anteriores, puedes hacer un cambio rápido de configuración de git en todo el sistema.
Simplemente edite o agregue los siguientes contenidos /etc/gitconfig
y listo, sus usuarios no tienen que preocuparse por nada de lo anterior:
[url "https://"]
insteadOf = git://