Der Versuch, so etwas wie git clone git://github.com/ry/node.git
nicht zu funktionieren, führt zu:
Initialized empty Git repository in /home/robert/node/.git/
github.com[0: 207.97.227.239]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)
Das Klonen über HTTP funktioniert jedoch einwandfrei. Bisher habe ich festgestellt, dass es sich um ein Problem mit dem Protokoll handelt, aber ich versuche, cloud9 zu installieren, für das der Befehl erforderlich ist
git submodule update --init --recursive
Das versucht, das git: // Protokoll zu verwenden und schlägt fehl. Gibt es eine Möglichkeit zu ändern, wie dieser Befehl funktioniert oder so?
git config --global url.https://.insteadOf git://
Antworten:
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.
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: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:
In der Ausgabe wird die folgende Zeile angezeigt:
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: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:
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:quelle
git config --global url."https://github".insteadOf git://github
.git config --global --unset url."https://".insteadOf
Github bietet auch http (s) -Zugriff, der von Ihrem Unternehmen mit viel geringerer Wahrscheinlichkeit blockiert wird. Um das Submodul anzuweisen, dies zu verwenden, können Sie Folgendes tun:
Dies ist genau der Grund, warum init und update separate Befehle sind - Sie können initiieren, Speicherorte anpassen und dann aktualisieren.
update --init
ist nur eine Verknüpfung, wenn Sie keine URLs anpassen müssen.Für alle anderen, die dies tun, können Sie natürlich auch eine ssh-URL verwenden (wenn Ihr Unternehmen git: // blockiert, aber nicht ssh), aber in diesem Fall hat das OP vermutlich keinen SSH-Zugriff auf das Remote-Repo.
quelle
sed -i 's@git://github@https://github@' .git/config
.Eine andere Option, bei der git config nicht berührt wird, besteht darin, die ssh-Einstellungen so zu ändern, dass Port 443 anstelle des regulären 22-Ports verwendet wird.
Referenz: Verwenden von SSH über den HTTPS-Port
Aus diesem Artikel:
Danach konnte ich erfolgreich Github pushen. Zu Hause können Sie die ssh-Konfiguration wieder so ändern, wie sie war, wenn Sie möchten.
quelle
Ich hatte auch das gleiche Problem für eine Weile. Dann habe ich versucht, die Git-Konfiguration mit dem vorgeschlagenen Befehl zu ändern:
was mir leider nicht geholfen hat . Ich hatte immer noch das gleiche Problem!
Was mein Problem tatsächlich gelöst hat, ist, dass ich die Remote-URL meines Repositorys mit dem folgenden Befehl erneut zurückgesetzt habe:
das war vorher so:
Nach dem Einstellen der Remote-URL mit
https://
anstelle des[email protected]
Problems wurde für mich behoben.quelle
Wenn Sie die obige Antwort von Nathan erweitern, können Sie auch das SSH-Protokoll ausprobieren, wenn Ihre Unternehmensfirewall https stört. In meinem Fall blockierte die Firewall das Git-Protokoll und stellte SSL-Zertifikate für https erneut aus. Dies brach mir die Laube, selbst wenn die Option strict-ssl deaktiviert war. Sie können eine ähnliche URL für ssh neu schreiben und einen ssh-Schlüssel / ein ssh-Paar erstellen, wie auf github beschrieben .
Sie müssten auch den ssh-agent für Ihre git-Installation aktivieren.
quelle
Da sich die GIT-Adresse für den Knotenserver geändert hat, müssen Sie jetzt Folgendes eingeben:
Git-Klon https://github.com/joyent/node
Viel Glück
quelle
Einführung
Ich werde hier meinen eigenen Ansatz hinzufügen ( der nicht erforderlich ist, wenn Sie ein öffentlich zugängliches Git-Repository haben, das https unterstützt ).
Ich arbeite in einer Firma, in der das Git-Repository nur von innerhalb der Firma zugänglich ist. Ich arbeite aber auch von zu Hause aus.
Wie kann ich von zu Hause aus in das Unternehmens-Repository pushen?
Ich habe ein Repository mit einem Ordner auf meinem Google-Laufwerk erstellt. Mit Ausnahme von git und https können Sie Repositorys als Pfade einfügen.
Also, anstatt zum Ursprung zu drängen, drücke ich zu "gDrive". Dadurch wird der Ordner von meiner Heimarbeitsstation mit Google Drive synchronisiert, und mein Arbeitscomputer übernimmt die Änderungen. Da manchmal Dateien im Verzeichnis ".git" nicht synchronisiert werden, benenne ich den Ordner vorübergehend von z. B. "trunk" in "trunk2" um. Dadurch werden sowohl Heim- als auch Arbeitscomputer zu 100% mit Google Drive synchronisiert.
Ich melde mich dann entweder über checkpoint-vpn remote (oder teamviewer) bei meinem Arbeitscomputer an und übertrage meine Updates in das Work Git-Repository.
Darüber hinaus würde der Prozess umgekehrt funktionieren, um in ein Git-Repository außerhalb des blockierten Unternehmens zu pushen.
quelle