Se questo è un problema con il firewall che blocca git: protocol port (9418), allora dovresti apportare una modifica più persistente in modo da non dover ricordare di emettere i comandi suggeriti da altri post per ogni repository git.
La soluzione di seguito funziona anche con i sottomoduli che potrebbero anche usare il protocollo git :.
Dal momento che il messaggio git in realtà non punta immediatamente alla porta di blocco del firewall 9418, proviamo a diagnosticare questo come il problema reale.
Diagnosi del problema
Riferimenti: https://superuser.com/q/621870/203918 e https://unix.stackexchange.com/q/11756/57414
Esistono diversi strumenti che è possibile utilizzare per determinare se il firewall causa il nostro problema: utilizzare quello che è installato sul 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, quindi ora abbiamo stabilito che la nostra porta git è bloccata da un firewall, cosa possiamo fare al riguardo? Continuare a leggere :)
Riscrittura URL di base
Git fornisce un modo per riscrivere gli URL usando git config
. Emetti semplicemente il seguente comando:
git config --global url."https://".insteadOf git://
Ora, come per magia, tutti i comandi Git si esibiranno una sostituzione di git://
ahttps://
Quali modifiche ha apportato questo comando?
Dai un'occhiata alla tua configurazione globale usando:
git config --list
Vedrai la seguente riga nell'output:
url.https://.insteadof=git://
Puoi vedere come appare questo file, dando un'occhiata a ~/.gitconfig
dove ora dovresti vedere che sono state aggiunte le seguenti due righe:
[url "https://"]
insteadOf = git://
Desideri un maggiore controllo?
Usa semplicemente un URL più completo / specifico nella sostituzione. Ad esempio, per avere solo gli URL GitHub utilizzare https: // anziché git: //, è possibile utilizzare qualcosa del tipo:
git config --global url."https://github".insteadOf git://github
È possibile eseguire questo comando più volte utilizzando sostituzioni diverse. Tuttavia, nel caso in cui un URL corrisponda a più sostituzioni, la corrispondenza più lunga "vince". Verrà effettuata una sola sostituzione per URL.
Modifiche a livello di sistema per amministratori di sistema
Se sei un amministratore di sistema Linux e non vuoi che i tuoi utenti debbano affrontare i problemi di cui sopra, puoi apportare una rapida modifica della configurazione di git a livello di sistema.
Basta modificare o aggiungere i seguenti contenuti /etc/gitconfig
e voilà i tuoi utenti non devono preoccuparsi di nessuno dei precedenti:
[url "https://"]
insteadOf = git://