Se esse é um problema com o firewall bloqueando a porta git: protocol (9418), faça uma alteração mais persistente para não ter que se lembrar de emitir comandos sugeridos por outras postagens para cada repositório git.
A solução abaixo também funciona apenas para submódulos que também podem estar usando o protocolo git:
Como a mensagem git realmente não aponta imediatamente para a porta de bloqueio do firewall 9418, vamos tentar diagnosticar isso como o problema real.
Diagnosticando o problema
Referências: https://superuser.com/q/621870/203918 e https://unix.stackexchange.com/q/11756/57414
Existem várias ferramentas que podemos usar para determinar se o firewall está causando o nosso problema - use o que estiver instalado no seu 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
OK, agora determinamos que nossa porta git está sendo bloqueada por um firewall, o que podemos fazer? Leia :)
Reescrita básica de URL
O Git fornece uma maneira de reescrever URLs usando git config
. Basta emitir o seguinte comando:
git config --global url."https://".insteadOf git://
Agora, como que por mágica, todos os comandos git farão uma substituição de git://
parahttps://
Que mudanças este comando fez?
Dê uma olhada na sua configuração global usando:
git config --list
Você verá a seguinte linha na saída:
url.https://.insteadof=git://
Você pode ver como isso fica registrado, dando uma olhada em ~/.gitconfig
onde você deve ver agora que as duas linhas a seguir foram adicionadas:
[url "https://"]
insteadOf = git://
Quer mais controle?
Basta usar um URL mais completo / específico na substituição. Por exemplo, para ter apenas URLs do GitHub use https: // em vez de git: //, você pode usar algo como:
git config --global url."https://github".insteadOf git://github
Você pode executar este comando várias vezes usando substituições diferentes. No entanto, no caso de um URL corresponder a várias substituições, a correspondência mais longa "vence". Apenas uma única substituição será feita por URL.
Alterações em todo o sistema para administradores de sistemas
Se você é um administrador de sistema Linux e não deseja que seus usuários passem pelas dificuldades acima, você pode fazer uma alteração rápida na configuração do git em todo o sistema.
Simplesmente edite ou adicione o seguinte conteúdo /etc/gitconfig
e pronto, seus usuários não precisam se preocupar com nenhum dos itens acima:
[url "https://"]
insteadOf = git://