git: // प्रोटोकॉल कंपनी द्वारा अवरुद्ध, मैं उसके आसपास कैसे प्राप्त कर सकता हूं?


188

कुछ करने की कोशिश करने से git clone git://github.com/ry/node.gitकाम नहीं चलेगा, इसके परिणाम निम्न हैं:

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)

हालाँकि, HTTP पर क्लोनिंग ठीक काम करती है। अब तक मैं इकट्ठा कर चुका हूं कि यह प्रोटोकॉल के साथ एक समस्या है, लेकिन मैं क्लाउड 9 स्थापित करने की कोशिश कर रहा हूं, जो कमांड की आवश्यकता है

git submodule update --init --recursive

जो git का उपयोग करने की कोशिश कर रहा है: // प्रोटोकॉल और असफल। क्या यह बदलने का एक तरीका है कि कमांड कैसे काम करेगी या कुछ और?


क्या आपके पास SSH का उपयोग है? या सिर्फ HTTP?
पाब्लो सांता क्रूज़

56
जीआईटी सवालों को बंद करने की कोशिश कर रहे लोगों के साथ यह क्या है? एफएक्यू के अनुसार, एसओ के दायरे में "प्रोग्रामर द्वारा आमतौर पर उपयोग किए जाने वाले सॉफ़्टवेयर टूल" शामिल हैं। यहां छह हजार से अधिक प्रश्न हैं। वे यहां के हैं।
कैसबेल

9
आप स्वचालित रूप से https: // का उपयोग करने के लिए Git प्राप्त कर सकते हैं: // जब भी कोई git देखता है: // URL:git config --global url.https://.insteadOf git://
WildlyInaccurate

जवाबों:


426

यदि यह आपके फ़ायरवॉल को गिट को अवरुद्ध करने के साथ एक मुद्दा है: प्रोटोकॉल पोर्ट (9418), तो आपको एक और अधिक लगातार परिवर्तन करना चाहिए ताकि आपको हर गिट रेपो के लिए अन्य पदों द्वारा सुझाए गए आदेश जारी करने के लिए याद न करना पड़े।

नीचे दिया गया समाधान भी सबमॉड्यूल्स के लिए काम करता है जो कि git: प्रोटोकॉल का भी उपयोग कर सकता है।

चूंकि git संदेश वास्तव में फ़ायरवॉल ब्लॉकिंग पोर्ट 9418 को तुरंत इंगित नहीं करता है, इसलिए यह वास्तविक समस्या के रूप में निदान करने का प्रयास करता है।

समस्या का निदान

संदर्भ: https://superuser.com/q/621870/203918 और https://unix.stackexchange.com/q/11756/57414

कई उपकरण हैं जो हम यह निर्धारित करने के लिए उपयोग कर सकते हैं कि क्या फ़ायरवॉल हमारी समस्या पैदा कर रहा है - आपके सिस्टम पर जो भी स्थापित है उसका उपयोग करें।

# 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

ठीक है, इसलिए अब हमने यह निर्धारित कर लिया है कि यह हमारा गिट्टी पोर्ट है जिसे एक फ़ायरवॉल द्वारा अवरुद्ध किया जा रहा है, हम इसके बारे में क्या कर सकते हैं? पढ़ते रहिये :)

मूल URL पुनर्लेखन

Git का उपयोग करके URL को फिर से लिखने का एक तरीका प्रदान करता है git config। बस निम्नलिखित आदेश जारी करें:

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

अब, के रूप में जादू से किया जाए तो सभी Git आदेशों की एक प्रतिस्थापन प्रदर्शन करेंगे git://करने के लिएhttps://

इस कमांड ने क्या बदलाव किए?

अपने वैश्विक विन्यास का उपयोग करके देखें:

git config --list

आपको आउटपुट में निम्न पंक्ति दिखाई देगी:

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

आप देख सकते हैं कि यह फ़ाइल पर कैसा दिखता है, ~/.gitconfigजहाँ आप अब देख लेना चाहिए कि निम्नलिखित दो पंक्तियों को जोड़ दिया गया है:

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

अधिक नियंत्रण चाहते हैं?

बस प्रतिस्थापन में अधिक पूर्ण / विशिष्ट URL का उपयोग करें। उदाहरण के लिए, केवल GitHub URL में git: // के बजाय https: // का उपयोग करना होगा, आप कुछ इस तरह का उपयोग कर सकते हैं:

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

आप अलग-अलग प्रतिस्थापन का उपयोग करके इस कमांड को कई बार चला सकते हैं। हालांकि, इस घटना में कि एक URL कई प्रतिस्थापन से मेल खाता है, सबसे लंबा मैच "जीत" है। प्रति URL केवल एक प्रतिस्थापन किया जाएगा।

सिस्टम-वाइड चेंजेस फॉर सिसमिन्स

यदि आप एक Linux Sysadmin हैं और आप नहीं चाहते कि आपके उपयोगकर्ता को उपरोक्त दर्द से गुजरना पड़े तो आप एक त्वरित सिस्टम-वाइड गिट कॉन्फ़िगरेशन परिवर्तन कर सकते हैं।

/etc/gitconfigअपने उपयोक्ताओं के लिए निम्नलिखित सामग्रियों को केवल संपादित करें या जोड़ दें और अपने उपयोगकर्ताओं को उपरोक्त में से किसी के बारे में चिंता करने की आवश्यकता नहीं है:

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

9
शानदार सादगी!
लांस हंट

बहुत अच्छा काम करता है! कोई और अधिक खोज और बदलें। स्क्रिप्ट का निर्माण अभी काम करते हैं। इस जवाब ने मुझे बहुत समय बचाया। धन्यवाद!
जेरेमी बेल

7
थोड़ा और नियंत्रण के लिए जो URL परिवर्तित हो जाता है, आप URL का हिस्सा भी निर्दिष्ट कर सकते हैं। उदाहरण के लिए: मेरे पास एक निजी आंतरिक सर्वर 'myserver.lan.example.com' है, जो SSH (gitlab) पर git repos को होस्ट करता है, लेकिन HTTPS को नहीं। इसलिए, यदि मुझे सुविधाजनक कुंजी प्रमाणीकरण का लाभ उठाना है तो मुझे SSH का उपयोग करना चाहिए । मैं गितुब से रेपो का भी उपयोग करता हूं, लेकिन मेरा कॉर्पोरेट फ़ायरवॉल एसएसएच से जीथब को अवरुद्ध करता है। मैं 'git: //' के सभी उदाहरणों को 'https: //' से बदलना नहीं चाहता क्योंकि इससे गिटलैब टूट जाएगा। उपाय है git config --global url."https://github".insteadOf git://github
क्लेज़र्मक 1

2
मैं साइबरविन के अंदर से गिट चला रहा था और मुझे काम करने का एकमात्र तरीका यह था कि 'सिस्टम-वाइड चेंजेस फॉर सिस्मैमिन्स' और 'url.https: //.insteadof=git/ "को जोड़कर' 'में बदलाव किया जाए। 'C: \ Program Files (x86) \ Git \ etc \ gitconfig' फ़ाइल। संकेत के लिए धन्यवाद!
क्रेग

3
इस परिवर्तन को पूर्ववत करने के लिए उपयोग कर सकते हैंgit config --global --unset url."https://".insteadOf
djskinner

29

Github http (s) एक्सेस भी प्रदान करता है, जिससे आपकी कंपनी द्वारा ब्लॉक किए जाने की संभावना बहुत कम है। उपयोग करने के लिए सबमॉड्यूल बताने के लिए, आप यह कर सकते हैं:

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

यह वास्तव में वास्तव में क्यों init और अपडेट अलग-अलग कमांड हैं - आप init कर सकते हैं, स्थानों को कस्टमाइज़ कर सकते हैं, फिर अपडेट कर सकते हैं। update --initजब आप किसी URL को कस्टमाइज़ करने की आवश्यकता नहीं करते हैं, तो केवल एक शॉर्टकट होता है।

किसी और के लिए जो इस पार होता है, आप निश्चित रूप से एक ssh URL का उपयोग कर सकते हैं (यदि आपकी कंपनी git: // लेकिन ssh को ब्लॉक नहीं करती है), लेकिन इस मामले में ओपी संभवतः दूरस्थ रेपो तक SSH की पहुंच नहीं रखता है।


ऐसा लगता है कि शायद मेरे लिए काम करेगा, हालांकि ऐसा लगता है कि मुझे व्यक्तिगत रूप से प्रत्येक के माध्यम से जाना होगा। विशेष रूप से अगर मायने रखता है कि github.com/ajaxorg/cloud9 कर रहा था ।
रॉबर्ट

4
@Robert: यदि बहुत सारे हैं, तो आप सीधे कॉन्फ़िगर फ़ाइल को संपादित कर सकते हैं और खोज और प्रतिस्थापित कर सकते हैं sed -i 's@git://github@https://github@' .git/config:।
कैस्केबेल

हम्म, किसी कारण के लिए वे फ़ाइल में http: // कहते हैं, लेकिन कमांड अभी भी गिट की कोशिश करता है: //
रॉबर्ट

1
मुझे ओपी में वर्णित समान समस्या हो रही है, लेकिन जब मैं इस समाधान का उपयोग करता हूं, तो यह अभी भी विफल रहता है, लेकिन थोड़ी अलग त्रुटि के साथ। यह कहता है "त्रुटि: https तक पहुंचने के दौरान: // ... घातक: HTTP अनुरोध विफल" क्या किसी को इस पर कोई अंतर्दृष्टि है? क्या मेरा होस्ट कुछ अवरुद्ध कर रहा है? मेरे अन्य सबमॉड्यूल्स ठीक हैं, मैं केवल एक के साथ परेशान हूं।
जो स्प्रैग सेप

13

एक अन्य विकल्प जिसमें टचिंग गाइट कॉन्फिगर नहीं है, नियमित 22 पोर्ट के बजाय पोर्ट 443 का उपयोग करने के लिए ssh सेटिंग्स को बदलना है।

संदर्भ: HTTPS पोर्ट पर SSH का उपयोग करना

उस लेख से:

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

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

बाद में, मैं जीथब को सफलतापूर्वक धक्का देने में सक्षम था। घर पर आप ssh config को उस तरह से बदल सकते हैं जैसे आप चाहते थे।


7

मैं भी कुछ समय के लिए एक ही मुद्दा रहा था। फिर मैंने सुझाए गए आदेश का उपयोग करके git config को बदलने की कोशिश की:

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

जो दुर्भाग्य से मेरे लिए चाल नहीं चला । मुझे अब भी वही समस्या हो रही थी!

वास्तव में आखिर में मेरी समस्या का समाधान क्या है, मैंने निम्नलिखित आदेश का उपयोग करके अपने भंडार का रिमोट url फिर से सेट किया है:

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

जो पहले इस तरह था:

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

समस्या के https://बजाय रिमोट यूआरएल सेट करने के बाद git@git.comमेरे लिए समस्या का समाधान हो गया।


1
मैंने एक ऐसे ही मुद्दे का अनुभव किया। ऐसा लगता है कि वैश्विक सेटिंग केवल आगे चलकर प्रतिरूपित क्लोन को प्रभावित करती है, और किसी भी प्रकार से पीछे नहीं हटती है।
टेलर एड्मिस्टन

2

ऊपर नथन के उत्तर पर विस्तार करते हुए, आप ssh प्रोटोकॉल को भी आज़मा सकते हैं यदि आपका कॉर्पोरेट फ़ायरवॉल https के साथ हस्तक्षेप कर रहा है। मेरे मामले में फ़ायरवॉल git प्रोटोकॉल को अवरुद्ध कर रहा था, https के लिए ssl प्रमाणपत्र फिर से जारी कर रहा था और मेरे लिए यह bower तोड़ रहा था, यहां तक ​​कि सख्त-एसएसएल विकल्प भी बंद हो गया था। आप ssh के लिए एक समान url पुनः लिख सकते हैं, और github पर वर्णित ssh कुंजी / जोड़ी बना सकते हैं ।

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

आपको अपने git इंस्टॉल के लिए ssh-Agent को भी चालू करना होगा ।


1

इसका कारण यह है कि नोड सर्वर के लिए GIT स्वीकार करने के बाद आपको अब दर्ज करना होगा:

गिट क्लोन https://github.com/joyent/node

सौभाग्य


6
यह प्रश्न फरवरी से था, जब ऊपर वैध URL था।
रॉबर्ट

@calccrypto लिंक एक कमांड का हिस्सा है जिसे कोड टैग नहीं किया गया है, यह सूचना के लिंक के लिए नहीं है।
माइक प्रीची

0

परिचय

मैं यहां अपना स्वयं का दृष्टिकोण जोड़ूंगा ( यदि आपको सार्वजनिक रूप से सुलभ गिट रिपॉजिटरी की आवश्यकता नहीं है जो https का समर्थन करता है )।

मैं एक ऐसी कंपनी में काम करता हूँ जहाँ git रिपॉजिटरी केवल कंपनी के अंदर से ही सुलभ है। लेकिन मैं घर से भी काम करती हूं।

मैं घर से कंपनी रिपॉजिटरी में कैसे धकेलूं?

मैंने अपने Google ड्राइव पर एक फ़ोल्डर के साथ एक रिपॉजिटरी बनाई है। Git और https को छोड़कर, आप रिपॉजिटरी को पथ के रूप में शामिल कर सकते हैं।

यहां छवि विवरण दर्ज करें

इसलिए, मैं मूल करने के लिए धक्का देने के बजाय "gDrive" करने के लिए धक्का। यह फ़ोल्डर को मेरे होम वर्कस्टेशन से Google ड्राइव पर सिंक करने का कारण बनता है, और फिर मेरा कार्य कंप्यूटर परिवर्तनों को खींचता है। इसके अतिरिक्त, चूंकि कभी-कभी ".गित" निर्देशिका में फ़ाइलें सिंक नहीं होती हैं, इसलिए मैं फ़ोल्डर को अस्थायी रूप से उदा "ट्रंक" से "ट्रंक 2" में बदल देता हूं। यह घर और काम दोनों कंप्यूटरों को Google ड्राइव के साथ 100% सिंक करने के लिए मजबूर करता है।

फिर मैं चेकपॉइंट-वीपीएन रिमोट (या टीमव्यूअर) के माध्यम से अपने काम के कंप्यूटर पर लॉग-ऑन करता हूं और अपने अपडेट्स को वर्क गिट रिपॉजिटरी में धकेलता हूं।

इसके अतिरिक्त, यह प्रक्रिया उस कंपनी के बाहर एक गिट रिपॉजिटरी को धक्का देने के लिए इसके विपरीत काम करेगी जो अवरुद्ध है।

  1. गूगल ड्राइव में फोल्डर को वर्कस्टेशन गिट रेपो से पुश करें।
  2. GDrive में अस्थायी रूप से प्रोजेक्ट डायरेक्टरी का नाम बदलकर 100% सिंक करें।
  3. किसी तरह के रिमोट और पुश परिवर्तन के माध्यम से होम कंप्यूटर तक पहुंचें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.