Wenn dies ein Problem mit Ihrer Firewall ist, die den git: protocol-Port (9418) blockiert, sollten Sie eine dauerhaftere Änderung vornehmen, damit Sie nicht daran denken müssen, für jedes git-Repo Befehle auszugeben, die von anderen Posts vorgeschlagen wurden.
Die folgende Lösung funktioniert auch nur für Submodule, die möglicherweise auch das git: -Protokoll verwenden.
Da die Git-Nachricht nicht sofort auf den Firewall-Blockierungsport 9418 verweist, versuchen wir, dies als das eigentliche Problem zu diagnostizieren.
Problem diagnostizieren
Referenzen: https://superuser.com/q/621870/203918 und https://unix.stackexchange.com/q/11756/57414
Es gibt verschiedene Tools, mit denen wir feststellen können, ob die Firewall unser Problem verursacht - verwenden Sie die auf Ihrem System installierte.
# 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, jetzt haben wir festgestellt, dass unser Git-Port von einer Firewall blockiert wird. Was können wir dagegen tun? Weiter lesen :)
Grundlegendes Umschreiben von URLs
Git bietet eine Möglichkeit, URLs mithilfe von neu zu schreiben git config
. Geben Sie einfach den folgenden Befehl ein:
git config --global url."https://".insteadOf git://
Jetzt führen alle Git-Befehle wie durch Zauberei eine Ersetzung von git://
to durchhttps://
Welche Änderungen hat dieser Befehl vorgenommen?
Sehen Sie sich Ihre globale Konfiguration an mit:
git config --list
In der Ausgabe wird die folgende Zeile angezeigt:
url.https://.insteadof=git://
Sie können sehen, wie dies in der Datei aussieht, indem Sie einen Blick darauf werfen, ~/.gitconfig
wo Sie jetzt sehen sollten, dass die folgenden zwei Zeilen hinzugefügt wurden:
[url "https://"]
insteadOf = git://
Willst du mehr Kontrolle?
Verwenden Sie einfach eine vollständigere / spezifischere URL als Ersatz. Wenn beispielsweise GitHub-URLs nur https: // anstelle von git: // verwenden sollen, können Sie Folgendes verwenden:
git config --global url."https://github".insteadOf git://github
Sie können diesen Befehl mehrmals mit verschiedenen Ersetzungen ausführen. Für den Fall, dass eine URL mit mehreren Ersetzungen übereinstimmt, "gewinnt" die längste Übereinstimmung. Pro URL wird nur ein einziger Ersatz vorgenommen.
Systemweite Änderungen für Sysadmins
Wenn Sie ein Linux-Systemadministrator sind und nicht möchten, dass Ihre Benutzer die oben genannten Probleme lösen müssen, können Sie eine schnelle systemweite Änderung der Git-Konfiguration vornehmen.
Bearbeiten oder fügen Sie einfach die folgenden Inhalte hinzu, /etc/gitconfig
und Ihre Benutzer müssen sich über keine der oben genannten Punkte Gedanken machen:
[url "https://"]
insteadOf = git://