Próba czegoś takiego git clone git://github.com/ry/node.git
nie będzie działać, spowoduje to:
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)
Jednak klonowanie przez HTTP działa dobrze. Do tej pory zorientowałem się, że jest to problem z protokołem, ale próbuję zainstalować cloud9, który wymaga polecenia
git submodule update --init --recursive
który próbuje użyć protokołu git: // i kończy się niepowodzeniem. Czy istnieje sposób, aby zmienić sposób działania tego polecenia?
git config --global url.https://.insteadOf git://
Odpowiedzi:
Jeśli jest to problem z zaporą blokującą port protokołu git: (9418), powinieneś wprowadzić bardziej trwałą zmianę, abyś nie musiał pamiętać o wydawaniu poleceń sugerowanych przez inne posty dla każdego repozytorium git.
Poniższe rozwiązanie działa również dla podmodułów, które mogą również korzystać z protokołu git:.
Ponieważ komunikat git tak naprawdę nie wskazuje natychmiast na port 9418 blokujący zaporę, spróbujmy zdiagnozować to jako rzeczywisty problem.
Diagnozowanie problemu
Odnośniki: https://superuser.com/q/621870/203918 i https://unix.stackexchange.com/q/11756/57414
Istnieje kilka narzędzi, których możemy użyć do ustalenia, czy zapora sieciowa powoduje nasz problem - użyj tego, które jest zainstalowane w twoim systemie.
OK, teraz ustaliliśmy, że nasz port git jest blokowany przez zaporę ogniową. Co możemy z tym zrobić? Czytaj :)
Podstawowe przepisywanie adresów URL
Git zapewnia sposób na przepisywanie adresów URL za pomocą
git config
. Wystarczy wydać następujące polecenie:Teraz, jak za pomocą magii, wszystkie polecenia git wykonają zamianę
git://
nahttps://
Jakie zmiany wprowadziło to polecenie?
Spójrz na swoją globalną konfigurację, używając:
W wyniku zobaczysz następujący wiersz:
Możesz zobaczyć, jak to wygląda w pliku, sprawdzając,
~/.gitconfig
gdzie powinieneś teraz zobaczyć, że dodano następujące dwie linie:Chcesz więcej kontroli?
Po prostu użyj bardziej kompletnego / konkretnego adresu URL w zamianie. Na przykład, aby tylko adresy URL GitHub używały https: // zamiast git: //, możesz użyć czegoś takiego:
Możesz uruchomić to polecenie wiele razy, używając różnych zamienników. Jednak w przypadku, gdy adres URL pasuje do wielu zamienników, najdłuższe dopasowanie „wygrywa”. Tylko jeden zamiennik zostanie wykonany na adres URL.
Systemowe zmiany dla Sysadmins
Jeśli jesteś Linux Sysadmin i nie chcesz, aby użytkownicy musieli przejść przez powyższe problemy, możesz dokonać szybkiej zmiany konfiguracji git w całym systemie.
Po prostu edytuj lub dodaj następującą treść, aby
/etc/gitconfig
użytkownicy nie musieli się martwić o żadne z powyższych:źródło
git config --global url."https://github".insteadOf git://github
.git config --global --unset url."https://".insteadOf
Github zapewnia również dostęp do http (s), co jest znacznie mniej prawdopodobne, że zostanie zablokowane przez twoją firmę. Aby poinformować submoduł, aby tego używał, możesz to zrobić:
Właśnie dlatego init i update są osobnymi poleceniami - możesz inicjować, dostosowywać lokalizacje, a następnie aktualizować.
update --init
jest tylko skrótem, gdy nie musisz dostosowywać żadnych adresów URL.Każdemu innemu, kto się w tym stanie, możesz oczywiście użyć adresu URL ssh (jeśli Twoja firma blokuje git: //, ale nie ssh), ale w tym przypadku OP prawdopodobnie nie ma dostępu SSH do zdalnego repozytorium.
źródło
sed -i 's@git://github@https://github@' .git/config
.Inną opcją, która nie wymaga dotknięcia git config, jest zmiana ustawień ssh na użycie portu 443 zamiast zwykłego portu 22.
Odniesienie: Używanie SSH przez port HTTPS
Z tego artykułu:
Później udało mi się skutecznie wypchnąć do Github. W domu możesz zmienić konfigurację ssh z powrotem na taką, jaka była, jeśli chcesz.
źródło
Przez jakiś czas miałem ten sam problem. Następnie próbowałem zmienić konfigurację git za pomocą sugerowanego polecenia:
co niestety nie zadziałało dla mnie . Nadal miałem ten sam problem!
Tym, co faktycznie rozwiązało mój problem, jest zresetowanie zdalnego adresu URL mojego repozytorium za pomocą następującego polecenia:
który wcześniej był taki:
Po ustawieniu zdalnego adresu URL
https://
zamiast[email protected]
problemu został dla mnie rozwiązany.źródło
Rozwijając powyższą odpowiedź Nathana, możesz również wypróbować protokół ssh, jeśli zapora firmowa zakłóca https. W moim przypadku zapora sieciowa blokowała protokół git, ponownie wystawiając certyfikaty ssl dla https i to dla mnie łamało, nawet przy wyłączonej opcji strict-ssl. Możesz wykonać podobną zmianę adresu URL dla ssh i utworzyć klucz / parę ssh, jak opisano na github .
Będziesz musiał także włączyć ssh-agent dla instalacji git.
źródło
to dlatego, że adres GIT dla serwera węzłów zmienił się, musisz teraz wprowadzić:
klon gita https://github.com/joyent/node
powodzenia
źródło
Wprowadzenie
Dodam tutaj moje własne podejście ( które nie jest wymagane, jeśli masz publicznie dostępne repozytorium git, które obsługuje https ).
Pracuję w firmie, w której repozytorium git jest dostępne tylko z wewnątrz firmy. Ale pracuję również z domu.
Jak przesłać do repozytorium firmowego z domu?
Utworzyłem repozytorium z folderem na moim dysku Google. Z wyjątkiem git i https można uwzględnić repozytoria jako ścieżki.
Zamiast naciskać na źródło, naciskam na „gDrive”. Powoduje to synchronizację folderu z mojej domowej stacji roboczej na dysk Google, a następnie mój komputer służbowy pobiera zmiany. Dodatkowo, ponieważ czasami pliki w katalogu „.git” nie synchronizują się, tymczasowo zmieniam nazwę folderu z np. „Trunk” na „trunk2”. Wymusza to 100% synchronizację komputerów domowych i służbowych z dyskiem Google.
Następnie loguję się na moim komputerze służbowym za pośrednictwem zdalnego kontrolera checkpoint-vpn (lub teamviewer) i wypycham moje aktualizacje do repozytorium git.
Dodatkowo proces działałby odwrotnie w przypadku wypychania do repozytorium git poza firmą, która jest zablokowana.
źródło