Go get निजी रिपॉजिटरी: चरण-दर-चरण मार्गदर्शिका

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go get निजी रिपॉजिटरी: यह शुरुआती लोगों के लिए दर्द क्यों है?

\n\n

आपने एक शानदार Go-पैकेज लिखा, इसे GitHub पर एक निजी रिपॉजिटरी में अपलोड किया, और अब इसे किसी अन्य प्रोजेक्ट में उपयोग करना चाहते हैं। आप go get github.com/yourname/secret-lib निष्पादित करते हैं — और आपको 403 Forbidden या remote: Repository not found त्रुटि मिलती है। परिचित लगता है?

\n\n

यह स्थिति शुरुआती Go-डेवलपर्स के लिए सबसे आम जालों में से एक है। Stack Overflow पर प्रश्न "What's the proper way to "go get" a private repository?" ने हजारों बार देखा गया है। समस्या यह है कि go get डिफ़ॉल्ट रूप से HTTPS का उपयोग करता है, SSH का नहीं, और आपके क्रेडेंशियल्स को नहीं जानता है।

\n\n

इस लेख में, हम निजी रिपॉजिटरी के लिए go get सेट करने के तीन काम करने वाले तरीकों पर चर्चा करेंगे: .gitconfig, .netrc और पर्यावरण चर GOPRIVATE के माध्यम से। आप सीखेंगे कि त्रुटियों से कैसे बचें और डीबगिंग के घंटे कैसे बचाएं।

\n\n

Go get निजी रिपॉजिटरी के साथ काम क्यों नहीं करता?

\n\n

डिफ़ॉल्ट रूप से, go get HTTPS के माध्यम से मॉड्यूल डाउनलोड करने का प्रयास करता है। सार्वजनिक रिपॉजिटरी के लिए यह ठीक है — अनाम पहुंच काम करती है। लेकिन निजी रिपॉजिटरी को प्रमाणीकरण की आवश्यकता होती है। Go अपने आप लॉगिन/पासवर्ड या टोकन नहीं डाल सकता।

\n\n

दूसरी समस्या है मॉड्यूल डिटेक्शन तंत्र। Go पहले जाँचता है कि क्या GitHub/GitLab/Bitbucket पर रिपॉजिटरी मौजूद है, HTML पेज का विश्लेषण करके। निजी रिपॉजिटरी के लिए, यह पेज प्रमाणीकरण के बिना उपलब्ध नहीं है। इसलिए त्रुटि repository not found आती है, भले ही रिपॉजिटरी मौजूद हो।

\n\n

तरीका 1: ~/.gitconfig में बदलाव (सबसे आसान)

\n\n

सबसे आसान तरीका है Git को किसी विशिष्ट डोमेन के लिए HTTPS के बजाय SSH का उपयोग करने के लिए बाध्य करना। फ़ाइल ~/.gitconfig में निम्नलिखित पंक्तियाँ जोड़ें:

\n\n
[url "git@github.com:"]\n    insteadOf = https://github.com/\n
\n\n

अब https://github.com/ का कोई भी अनुरोध स्वचालित रूप से SSH से बदल दिया जाएगा। सुनिश्चित करें कि आपने SSH कुंजी सेट की है और इसे GitHub/GitLab खाते में जोड़ा है।

\n\n

जाँच करें:

\n
go get github.com/your-org/private-repo\n# त्रुटि के बिना काम करता है!\n
\n\n

महत्वपूर्ण: यह तरीका GitHub पर सभी रिपॉजिटरी के लिए व्यवहार बदलता है। यदि आपको केवल एक के लिए इसकी आवश्यकता है, तो अधिक सटीक सेटिंग का उपयोग करें:

\n\n
[url "git@github.com:your-org/"]\n    insteadOf = https://github.com/your-org/\n
\n\n

तरीका 2: टोकन और पासवर्ड के लिए .netrc

\n\n

यदि आप HTTPS पसंद करते हैं (उदाहरण के लिए CI/CD में), तो फ़ाइल ~/.netrc का उपयोग करें। Go इस फ़ाइल को पढ़ सकता है और क्रेडेंशियल्स डाल सकता है।

\n\n

600 अनुमतियों के साथ फ़ाइल ~/.netrc बनाएँ:

\n\n
machine github.com\nlogin your-github-username\npassword your-personal-access-token\n
\n\n

टोकन कहाँ से प्राप्त करें? GitHub पर: Settings → Developer settings → Personal access tokens → Generate new token। repo अनुमतियाँ चुनें (निजी रिपॉजिटरी के लिए)।

\n\n

इसके बाद:

\n
go get github.com/your-org/private-repo\n
\n\n

GitLab के लिए:

\n
machine gitlab.com\nlogin your-gitlab-username\npassword your-gitlab-access-token\n
\n\n

यह तरीका CI/CD के लिए आदर्श है, जहाँ SSH कुंजियाँ संग्रहीत करना हमेशा सुविधाजनक नहीं होता।

\n\n

तरीका 3: GOPRIVATE — मॉड्यूल के लिए जीवन रक्षक

\n\n

पर्यावरण चर GOPRIVATE Go को बताता है: "अरे, ये मॉड्यूल निजी हैं, इन्हें सार्वजनिक प्रॉक्सी के माध्यम से जाँचने की कोशिश मत करो और इनके HTML पेजों पर मत जाओ।" यह "repository not found" समस्या को हल करता है।

\n\n

टर्मिनल में सेट करें (या ~/.bashrc / ~/.zshrc में लिखें):

\n\n
export GOPRIVATE=github.com/your-org/*\n
\n\n

अब Go आपके संगठन के सभी रिपॉजिटरी के लिए सार्वजनिक मॉड्यूल प्रॉक्सी (proxy.golang.org) को अनदेखा करेगा। go get कमांड सीधे

ब्लॉग

पुस्तक अनुशंसाएँ