Http ट्रांसपोर्ट के लिए गिट्स के साथ सॉक्स प्रॉक्सी का उपयोग करना


81

HTTP ट्रांसपोर्ट के लिए git को सॉक्स प्रॉक्सी का उपयोग कैसे करें?

मैं GIT_PROXY_COMMAND के साथ git को कॉन्फ़िगर करने में सफल रहा GIT परिवहन के लिए एक मोजे प्रॉक्सी का उपयोग करने के लिए।

इसके अलावा, मैंने मोजे को परिभाषित करने के लिए अपनी .curlrc फ़ाइल को कॉन्फ़िगर किया है और मैं कर्ल कमांड के साथ सीधे जानकारी प्राप्त कर सकता हूं जैसे:

curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack

लेकिन HTTP ट्रांसपोर्ट प्रोटोकॉल का उपयोग करके डेटा को पुनः प्राप्त करने के लिए git के साथ एक सॉक्स प्रॉक्सी का उपयोग कैसे करें:

git clone http://git.kernel.org/pub/scm/git

नीचे patthoyts का जवाब आधिकारिक तौर पर git 2.7 (Dec 2015) में समर्थित होगा: stackoverflow.com/a/34118102/6309
VONC

जवाबों:


149

मैंने Git 1.8.2 और SOCKS v5 प्रॉक्सी के साथ परीक्षण किया, मेरे लिए सेटिंग निम्नलिखित काम करती है:

git config --global http.proxy 'socks5://127.0.0.1:7070'

अद्यतन 2017-3-31:

दस्तावेज़ के अनुसार , नाम के बावजूद , इसे HTTP और HTTPS रिपॉजिटरी यूआरएल दोनों के लिए काम करना चाहिए। यह इंगित करने के लिए धन्यवाद @user।http.proxy

अद्यतन 2018-11-27:

प्रॉक्सी को अक्षम करने के लिए, कमांड चलाएँ:

git config --global --unset http.proxy

EDIT 2019-03-04:

यदि आप यह भी चाहते हैं कि प्रॉक्सी का उपयोग करके होस्ट नाम को हल किया जाए, तो नीचे दिए गए थेज़फ के समाधान का उपयोग करें, जिसके socks5hबजाय इसका उपयोग किया जाता हैsocks5


3
brantyoung, धन्यवाद! मैं इंटरनेट कनेक्शन का भुगतान करना भूल गया और कोई बाहरी कनेक्शन नहीं था। मैंने गेटवे के रूप में एक और सर्वर का उपयोग किया है: ssh -D 4000 <user> @server -p <port>, और github पर प्रोजेक्ट अपलोड करने के लिए सुसाइड किया: git config http.proxy 'मोजे 5: // localhost: 4000'। धन्यवाद।

मुझे पैसा मिलेगा और मैं इंटरनेट के लिए भुगतान करूंगा :), क्योंकि परियोजना लगभग तैयार है :)

1
मैं कैसे परेशान हूँ? क्या मैं '' पर सेट करूँ?
12

2
@briankip खोलें ~/.gitconfigऔर निकालें [https.proxy]और [http.proxy]अनुभाग, इसकी iniफ़ाइल, इसे संपादित करने के लिए स्वतंत्र महसूस करें।
यांग।

4
@briankip, मुझे लगता है कि आप इसे केवल अपने कॉन्फ़िगरेशन, जैसे git -c http.proxy=socks5://127.0.0.1:7070, या कुछ और में स्थायी रूप से कमांड लाइन पर रख सकते हैं । हो सकता है कि आप उस के लिए एक उपनाम बना सकते हैं gitsocks, जो आपको आसानी से और बिना मोजे के वांछित के रूप में आसानी से कॉल करने की अनुमति देगा
एरॉन मैकडैड

52

यदि आप प्रॉक्सी को वैश्विक कॉन्फ़िगरेशन के रूप में सेट नहीं करना चाहते हैं, तो ALL_PROXY=उदाहरण के लिए प्रयास करें :

$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git

1
धन्यवाद! यह वास्तव में मेरी मदद करता है जबकि वैश्विक एक नहीं करता है।
redreamality

1
धन्यवाद! वास्तव में काम करता है!
smoothdvd

44

(बस एक छोटे से अनुस्मारक) यदि आप चाहते हैं होस्ट नाम भी प्रॉक्सी द्वारा हल किया जा (कि साधन प्रॉक्सी के माध्यम से सब कुछ गुजर ), विशेष रूप से जब आप एक क्लोनिंग कर रहे हैं सार , तो आपको निम्न सेटिंग (उपयोग कर सकते हैं महत्वपूर्ण यह है कि इसे इस्तेमाल करता है socks5h बजाय की socks5 ):

git config --global http.proxy socks5h://127.0.0.1:1080

15

मैं मोजे 5 प्रॉक्सी से एक विशिष्ट रिपॉजिटरी को क्लोन करने के लिए निम्न कमांड का उपयोग करता हूं। प्रॉक्सी सेटिंग्स --configविकल्प के साथ निर्दिष्ट हैं ।

$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'

यह मेरे लिए एकमात्र समाधान कार्य है, 'ssh -D xxx' के साथ कॉम्बो
Tiana987642

7

नोट: यहां पैच 2015 में संस्करण 2.4.11 के लिए गिट पर लागू किया गया था। उस समय के बाद से आप बस मोज़े का उपयोग कर सकते हैं: // url http.proxy कॉन्फ़िगरेशन सेटिंग्स के साथ।

Git के लिए: // प्रोटोकॉल में हमारे पास SOCKS प्रॉक्सी के साथ Git का उपयोग होता है । हालाँकि, ऐसा प्रतीत होता है कि git ठीक से मोज़े परदे के पीछे का समर्थन नहीं करता है। git ही libcurl से जुड़ा हुआ है। तो .curlrc फ़ाइल का उपयोग नहीं किया जाता है (जो कि कर्ल कमांड लाइन क्लाइंट के लिए है)। हालाँकि, निम्न पैच आवश्यक समर्थन प्रदान करता है। इस पैच के साथ जिसे लागू करने के लिए हम केवल ALL_PROXY पर्यावरण चर या HTTP_PROXY या HTTPS_PROY को सेट कर सकते हैंsocks://hostname:portnum HTTPS_PROXY (या मोज़े / मोज़े 5) या वास्तव में http.proxy git config सेटिंग में सेट कर सकते हैं और libcarl अब वास्तव में प्रॉक्सी का उपयोग करते समय मोज़े प्रोटोकॉल का उपयोग करेंगे।

उदाहरण के लिए, एक सक्रिय ट्रेस:

$ GIT_CURL_VERBOSE=1 bin-wrappers/git -c "http.proxy=socks://localhost:1080" ls-remote http://github.com/patthoyts/tclftd2xx.git
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to proxy localhost port 1080 (#0)
*   Trying 127.0.0.1...
* connected
* SOCKS4 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET /patthoyts/tclftd2xx.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.1.msysgit.1.dirty
... and on to a successful request ...

आवश्यक पैच:

diff --git a/http.c b/http.c
index 3b312a8..f34cc75 100644
--- a/http.c
+++ b/http.c
@@ -322,6 +322,14 @@ static CURL *get_curl_handle(void)
        if (curl_http_proxy) {
                curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
                curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+#if LIBCURL_VERSION_NUM >= 0x071800
+               if (!strncmp("socks5", curl_http_proxy, 6))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+               else if (!strncmp("socks4a", curl_http_proxy, 7))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
+               else if (!strncmp("socks", curl_http_proxy, 5))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+#endif
        }

        return result;

जैसे मैंने लिखा कि मैं GIT परिवहन के लिए मोजे प्रॉक्सी का उपयोग करने के लिए git को कॉन्फ़िगर करने में सफल रहा। क्या मैं HTTP (एस) परिवहन के लिए एक मोजे प्रॉक्सी के साथ git का उपयोग करना चाहता
हूं

3

सिर्फ @briankip के संदर्भ में और HTTP प्रॉक्सी सेटिंग को यांग के रूप में हटाकर। आपने उल्लेख किया कि आप सीधे आईएनआई फ़ाइल को संपादित कर सकते हैं।

आप कमांड लाइन का उपयोग करके भी ऐसा कर सकते हैं

git config --global --unset http.proxy

यह पुष्टि करने के लिए कि वर्तमान कॉन्फ़िगरेशन का उपयोग करके सूची हटा दी गई है

git config --list


1

सुझाए गए तरीकों में से किसी ने भी मेरे लिए काम नहीं किया, इसलिए मुझे निम्नलिखित निर्देश के रूप में एक और दृष्टिकोण मिला:


  1. SOCKS5प्रोटोकॉल का उपयोग करके एक सुरंग (डायनेमिक पोर्ट फ़ॉरवर्डिंग) बनाएं ssh:
    ssh -ND 9994 user@YourSshServer

  1. proxychainsअपने लोकलहोस्ट पर इंस्टॉल करें , उस ssh सर्वर से नहीं जिससे आप जुड़े हैं:

  1. अपनी proxychainsकॉन्फ़िगर फ़ाइल संपादित करें :
    sudo nano /etc/proxychains.confफिर फ़ाइल के अंत में निम्न पंक्ति जोड़ें:
    socks5 127.0.0.1 9994

  1. अब हम एक gitकमांड करने के लिए तैयार हैं (कमांड proxychainsसे पहले रखा जाना चाहिए):
    proxychains git push origin develop

0

उपरोक्त में से किसी ने भी मेरे लिए दुर्भाग्य से काम नहीं किया, हालांकि यह किया:

nano ~/.ssh/config

जोड़ें:

Host my-host.foo.bar.com
    ProxyJump username@host.local

जहाँ 'host.local' साझाकरण सेटिंग में 'दूरस्थ लॉगिन सक्षम' के साथ एक वेनिला मैक है। मेरे लिए काम किया :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.