«go get» और GitHub: «terminal prompts disabled» की दीवार तोड़ना

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

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

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

परिचय: जब एक साधारण go get एक पहेली बन जाता है

\n\n

क्या आपने कभी go get github.com/आपका-खाता/निजी-रिपॉजिटरी चलाने की कोशिश की है और जवाब में एक ठंडा, अमित्र संदेश मिला है?

\n\n
go get github.com/आपका-खाता/निजी-रिपॉजिटरी: \n  module github.com/आपका-खाता/निजी-रिपॉजिटरी: \n  git ls-remote -q origin in /tmp/...: exit status 128:\n    remote: Invalid username or password.\n    fatal: Authentication failed for 'https://github.com/आपका-खाता/निजी-रिपॉजिटरी.git'
\n\n

या, इससे भी अधिक रहस्यमय:

\n
go get github.com/आपका-खाता/निजी-रिपॉजिटरी: \n  terminal prompts disabled\n  Confirm the import path was entered correctly.\n  If this is a private repo, see https://golang.org/doc/faq#git_https
\n\n

परिचित स्थिति है? यदि हाँ — तो आप सही जगह पर आए हैं। यह त्रुटि GitHub पर निजी रिपॉजिटरी के साथ काम करने वाले Go डेवलपर्स के लिए एक क्लासिक «ठोकर का पत्थर» है। Stack Overflow पर इस प्रश्न को हजारों बार देखा गया है, और आज हम इसे हमेशा के लिए समझ लेंगे।

\n\n

इस लेख में हम केवल समस्या का समाधान नहीं करेंगे — हम समझेंगे कि यह क्यों होती है, और पर्यावरण को इस तरह से कॉन्फ़िगर करना सीखेंगे ताकि go get निजी रिपॉजिटरी के साथ मक्खन की तरह काम करे। चलिए शुरू करते हैं!

\n\n

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

\n\n

कारण समझने के लिए, Go के «हुड के नीचे» झाँकना होगा। जब आप go get चलाते हैं, तो Go टूल कई काम करता है:

\n\n
    \n
  1. यह HTTPS के माध्यम से रिपॉजिटरी को क्लोन करने का प्रयास करता है (यह डिफ़ॉल्ट प्रोटोकॉल है)।
  2. \n
  3. यदि रिपॉजिटरी निजी है, तो Git प्रमाणीकरण (लॉगिन/पासवर्ड) का अनुरोध करता है।
  4. \n
  5. Go, डिफ़ॉल्ट रूप से, टर्मिनल में इंटरैक्टिव अनुरोधों को अक्षम करता है — यही वह «terminal prompts disabled» है।
  6. \n
\n\n

Go ऐसा क्यों करता है? यह सरल है: स्वचालित बिल्ड या CI/CD पाइपलाइनों में, इंटरैक्टिव पासवर्ड इनपुट संभव नहीं है। इसलिए Go इनपुट की प्रतीक्षा में फँसने के बजाय त्रुटि के साथ «गिरना» पसंद करता है।

\n\n

मुख्य विचार: «terminal prompts disabled» त्रुटि कोई बग नहीं, बल्कि एक फीचर है। Go आपसे कह रहा है: «मैं आपसे पासवर्ड नहीं पूछ सकता, मुझे तैयार क्रेडेंशियल दें।» और हमारा काम उन्हें प्रदान करना है।

\n\n

विधि 1: SSH का उपयोग (सबसे विश्वसनीय और सही)

\n\n

यह अनुशंसित विधि है। SSH कुंजियाँ सुरक्षित, सुविधाजनक हैं और हर बार पासवर्ड दर्ज करने की आवश्यकता नहीं होती है।

\n\n

चरण 1. SSH कुंजी जनरेट करें (यदि नहीं है)

\n

टर्मिनल खोलें और चलाएँ:

\n
ssh-keygen -t ed25519 -C "आपका_ईमेल@example.com"
\n

कुंजी को मानक फ़ोल्डर (~/.ssh/id_ed25519) में सहेजने के लिए Enter दबाएँ। आप एक पासफ़्रेज़ जोड़ सकते हैं — इससे सुरक्षा बढ़ेगी।

\n\n

चरण 2. SSH एजेंट में कुंजी जोड़ें

\n
eval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519
\n\n

चरण 3. GitHub पर सार्वजनिक कुंजी जोड़ें

\n

~/.ssh/id_ed25519.pub की सामग्री कॉपी करें:

\n
cat ~/.ssh/id_ed25519.pub
\n

GitHub पर जाएँ → Settings → SSH and GPG keys → New SSH key। कुंजी चिपकाएँ और सहेजें।

\n\n

चरण 4. SSH का उपयोग करने के लिए Git कॉन्फ़िगर करें

\n

अब सबसे महत्वपूर्ण: Go को HTTPS के बजाय SSH का उपयोग करने के लिए बाध्य करना होगा। इसके लिए ~/.gitconfig फ़ाइल संपादित करें:

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

यह निर्देश Git से कहता है: «जब तुम https://github.com/ देखो — तो git@github.com: (SSH) का उपयोग करो»।

\n\n

चरण 5. पुनः प्रयास करें

\n
go get github.com/आपका-खाता/निजी-रिपॉजिटरी@latest
\n

यदि सब कुछ सही ढंग से कॉन्फ़िगर किया गया है — त्रुटि गायब हो जाएगी। Go प्रमाणीकरण के लिए SSH का उपयोग करेगा, और SSH एजेंट कुंजी प्रदान करेगा।

\n\n

विधि 2: Personal Access Token (PAT) का उपयोग — CI/CD और स्क्रिप्ट के लिए

\n\n

SSH स्थानीय विकास के लिए उपयुक्त है

ब्लॉग

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