git: // protokolü şirket tarafından engellendi, bunu nasıl çözebilirim?


188

Gibi bir şey denemek git clone git://github.com/ry/node.gitişe yaramaz, sonuçta:

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)

Ancak, HTTP üzerinden klonlama iyi sonuç verir. Şimdiye kadar bunun protokolle ilgili bir sorun olduğunu topladım, ancak komut gerektiren cloud9'u yüklemeye çalışıyorum

git submodule update --init --recursive

git: // protokolünü kullanmaya çalışıyor ve başarısız oluyor. Bu komutun çalışma şeklini değiştirmenin bir yolu var mı?


SSH erişiminiz var mı? ya da sadece HTTP?
Pablo Santa Cruz

56
Git sorularını kapatmaya çalışan kişilerde ne var? SSS'ye göre, SO'nun kapsamı "programcılar tarafından yaygın olarak kullanılan yazılım araçlarını" içerir. Burada altı binden fazla soru var. Onlar buraya aitler.
Cascabel

9
git config --global url.https://.insteadOf git://
Git'in

Yanıtlar:


426

Bu, güvenlik duvarınızın git: protokol bağlantı noktasını (9418) engellemesiyle ilgili bir sorunsa, daha kalıcı bir değişiklik yapmanız gerekir, böylece her git repo için diğer gönderiler tarafından önerilen komutları vermeyi hatırlamanız gerekmez.

Aşağıdaki çözüm sadece git: protokolünü kullanıyor olabilecek alt modüller için de kullanılabilir.

Git mesajı hemen güvenlik duvarı engelleme bağlantı noktası 9418'i göstermediğinden, bunu gerçek sorun olarak teşhis etmeye çalışalım.

Sorunu Teşhis Etme

Referanslar: https://superuser.com/q/621870/203918 ve https://unix.stackexchange.com/q/11756/57414

Sorunumuza neden olan güvenlik duvarının sisteminizde yüklü olanı kullanın olup olmadığını belirlemek için kullanabileceğimiz birkaç araç vardır.

# 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

Tamam, şimdi git bağlantı noktamızın bir güvenlik duvarı tarafından engellendiğini belirledik, bu konuda ne yapabiliriz? Okumaya devam etmek :)

Temel URL Yeniden Yazma

Git, URL'leri kullanarak yeniden yazmak için bir yol sağlar git config. Aşağıdaki komutu vermeniz yeterlidir:

git config --global url."https://".insteadOf git://

Şimdi, büyü gibi, tüm git komutları bir ikame gerçekleştirecek git://içinhttps://

Bu Komut Hangi Değişiklikleri Yaptı?

Şunları kullanarak küresel yapılandırmanıza göz atın:

git config --list

Çıktıda aşağıdaki satırı göreceksiniz:

url.https://.insteadof=git://

~/.gitconfigAşağıdaki iki satırın eklendiğini görmeniz gereken yere bir göz atarak bunun dosyada nasıl göründüğünü görebilirsiniz:

[url "https://"]
    insteadOf = git://

Daha Fazla Kontrol İster misiniz?

Değiştirme işleminde daha eksiksiz / spesifik bir URL kullanmanız yeterlidir. Örneğin, GitHub URL'lerinin git: // yerine yalnızca https: // kullanmasını sağlamak için şöyle bir şey kullanabilirsiniz:

git config --global url."https://github".insteadOf git://github

Farklı komutlar kullanarak bu komutu birden çok kez çalıştırabilirsiniz. Ancak, bir URL'nin birden fazla değiştirmeyle eşleşmesi durumunda en uzun eşleşme "kazanır". URL başına yalnızca tek bir değişiklik yapılır.

Sistem yöneticileri için sistem genelinde değişiklikler

Bir Linux Sysadmin iseniz ve kullanıcılarınızın yukarıdaki acılardan geçmesini istemiyorsanız, sistem genelinde hızlı bir yapılandırma değişikliği yapabilirsiniz.

Aşağıdaki içerikleri düzenleyin veya ekleyin /etc/gitconfigve kullanıcılarınızın yukarıdakilerden herhangi biri hakkında endişelenmesine gerek yoktur:

[url "https://"]
    insteadOf = git://

9
Mükemmel sadelik!
Lance Hunt

Harika çalışıyor! Artık arama ve değiştirme yok. Komut dosyaları oluşturun, şimdi çalışın. Bu cevap bana çok zaman kazandırdı. Teşekkürler!
Jeremy Bell

7
Hangi URL'nin dönüştürüleceğini biraz daha kontrol etmek için URL'nin bir bölümünü de belirleyebilirsiniz. Örneğin: SSH (gitlab) üzerinden git depolarını barındıran ancak HTTPS'yi barındıran özel bir iç sunucum olan 'myserver.lan.example.com' var. Bu nedenle, gereken ben elverişli anahtar kimlik yararlanmak istiyorsanız SSH kullanmak. Github'daki depoları da kullanıyorum, ancak kurumsal güvenlik duvarım SSH'yi Github'a engelliyor. Gitlab'ı bozacağı için sadece 'git: //' tüm örneklerini 'https: //' ile değiştirmek istemiyorum. Çözüm git config --global url."https://github".insteadOf git://github.
clayzermk1

2
Cygwin'in içinden git çalıştırıyordum ve bunu çalışmanın tek yolu 'Sysadmins için Sistem Çapında Değişiklikler' yapmak ve 'url.https: //.insteadof=git: //' değişikliklerini eklemekti. 'C: \ Program Files (x86) \ Git \ etc \ gitconfig' dosyası. İpucu için teşekkürler!
Craig

3
Bu değişikliği geri almak için kullanabilirsinizgit config --global --unset url."https://".insteadOf
djskinner

29

Github, şirketiniz tarafından engellenme olasılığı daha düşük olan http (s) erişimi de sağlar. Alt modüle bunu kullanmasını söylemek için şunları yapabilirsiniz:

git submodule init
git config submodule.<name>.url https://github.com/...
git submodule update

Aslında init ve güncellemenin ayrı komutlar olmasının nedeni budur - başlatabilir, konumları özelleştirebilir ve daha sonra güncelleyebilirsiniz. update --initherhangi bir URL'yi özelleştirmeniz gerekmediğinde kullanılan bir kısayoldur.

Bunun ötesinde olan herkes için elbette bir ssh URL'si de kullanabilirsiniz (şirketiniz git: // ssh'yi engellemiyorsa), ancak bu durumda OP'nin muhtemelen uzak repoya SSH erişimi yoktur.


Bunun gibi sesler muhtemelen benim için işe yarayacaktır, ancak her birini ayrı ayrı gözden geçirmem gerekecek gibi görünüyor. Özellikle önemliyse github.com/ajaxorg/cloud9 yapıyordum .
Robert

4
@Robert: bir sürü, doğrudan yapılandırma dosyasını düzenlemek ve bir arama yapmak ve yerini alabilir: sed -i 's@git://github@https://github@' .git/config.
Cascabel

Hmm, bir nedenden dolayı dosyada http: // diyorlar, ama komut hala git: //
Robert

1
OP açıklanan aynı sorunu yaşıyorum, ama bu çözümü kullandığımda, hala başarısız, ama biraz farklı bir hata ile. "Hata: https: // ... fatal: HTTP isteği başarısız oldu" yazıyor Bu konuda herhangi bir öngörü var mı? Sunucum bir şeyi engelliyor mu? Diğer alt modüllerim iyi çalışıyor, sadece biriyle ilgili sorun yaşıyorum.
Jo Sprague

13

Git config'e dokunmadan başka bir seçenek de ssh ayarlarını normal 22 portu yerine 443 portunu kullanacak şekilde değiştirmektir.

Başvuru: HTTPS bağlantı noktası üzerinden SSH kullanma

Bu makaleden:

edit the file at ~/.ssh/config, and add this section:

Host github.com
   Hostname ssh.github.com   
   Port 443

Daha sonra, başarılı bir şekilde Github'a gitmeyi başardım. Evde ssh config'i istediğiniz gibi değiştirebilirsiniz.


7

Bir süre de aynı sorunu yaşıyordum. Sonra git komutunu önerilen komutu kullanarak değiştirmeyi denedim:

git config --global url."https://".insteadOf git://

bu ne yazık ki benim için hile yapmadı . Hala aynı sorunu yaşıyordum!

Sonunda sorunumu gerçekten çözen şey, aşağıdaki komutu kullanarak depomun uzak URL'sini tekrar sıfırladım:

git remote set-url origin https://github.com/<my_user_name>/<my_repo_name>.git

daha önce böyle bir şeydi:

git remote set-url origin git@github.com:<my_user_name>/<my_repo_name>.git

Uzak url ayarladıktan sonra sorun https://yerine kullanarak git@git.combenim için çözüldü.


1
Benzer bir sorun yaşadım. Görünüşe bakılırsa, küreselleşme yalnızca ileriye doğru klonlanan depoları etkiler ve geriye dönük olarak değişmez.
Taylor Edmiston

2

Nathan'ın yukarıdaki cevabını genişleterek, şirket güvenlik duvarınız https'ye müdahale ediyorsa ssh protokolünü de deneyebilirsiniz. Benim durumumda güvenlik duvarı git protokolünü engelliyordu, https için ssl sertifikalarını yeniden veriyordu ve bu benim için, katı-ssl seçeneği kapalı olsa bile bower'ı kırıyordu. Ssh için benzer bir url yeniden yazma yapabilir ve github'da açıklandığı gibi bir ssh anahtarı / çifti oluşturabilirsiniz .

 git config --global url."ssh://git@github.com".insteadOf git://github.com

Git yüklemeniz için ssh-agent'ı da açmanız gerekir .


1

düğüm sunucusunun GIT adresinin değişmiş olması nedeniyle şimdi girmeniz gerekir:

git clone https://github.com/joyent/node

iyi şanslar


6
Bu soru, yukarıdaki URL'nin geçerli olduğu Şubat ayıydı.
Robert

@calccrypto bağlantı, kod etiketli olmayan bir komutun parçasıdır, bilgi bağlantısı olması amaçlanmamıştır.
Mike Precup

0

Giriş

Buraya kendi yaklaşımımı ekleyeceğim ( https'yi destekleyen herkese açık bir git deponuz varsa gerekli değildir ).

Git deposunun yalnızca şirket içinden erişilebildiği bir şirkette çalışıyorum. Ama aynı zamanda evden de çalışıyorum.

Şirket deposuna evden nasıl aktarırım?

Google sürücümde bir klasör içeren bir havuz oluşturdum. Git ve https dışında havuzları yol olarak ekleyebilirsiniz.

resim açıklamasını buraya girin

Yani, orijini itmek yerine "gDrive" a geçiyorum. Bu, klasörün ev iş istasyonumdan google sürücüsüne eşitlenmesine neden olur ve daha sonra iş bilgisayarım değişiklikleri alır. Ayrıca, bazen ".git" dizinindeki dosyalar senkronize olmadığından, klasörü geçici olarak örneğin "trunk" tan "trunk2" olarak yeniden adlandırıyorum. Bu, hem ev hem de iş bilgisayarlarını google sürücü ile% 100 senkronize olmaya zorlar.

Daha sonra checkpoint-vpn remote (veya teamviewer) aracılığıyla iş bilgisayarımda oturum açıyorum ve güncellemelerimi iş git deposuna aktarıyorum.

Ayrıca, işlem engellenen şirket dışındaki bir git deposuna aktarma işlemi için tersi de geçerlidir.

  1. Google Play'deki iş istasyonuna git repo'dan klasöre aktarın.
  2. GDrive'da proje dizinini geçici olarak yeniden adlandırarak% 100 senkronizasyonu zorlayın.
  3. Ev bilgisayarına bir tür uzaktan kumanda ve push değişiklikleri ile erişin.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.