जाओ 'टर्मिनल प्रॉम्प्ट्स डिसेबल्ड' त्रुटि में परिणाम के लिए github प्राइवेट रेपो


187

मैंने अपने ब्राउज़र से Github UI का उपयोग करके निजी रेपो उदाहरण / myprivaterepo बनाया है।

फिर मैं अपनी गो डायरेक्टरी (डेस्कटॉप पर) गया और इसे क्लोन किया:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

अब तक सब ठीक है। फ़ाइल अनुसूचक को बनाया गया। अह, रेपो में जोड़ा गया, और धकेल दिया गया।

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

एवरीथिंग ओके। लेकिन जब मैं एक साफ लैपटॉप पर गया और रेपो का क्लोन बनाने की कोशिश की, तो मुझे एक त्रुटि मिली:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

मेरे लैपटॉप को अपने ही रेपो पर नफरत क्यों है और मैं इसे अपने भाग्य को स्वीकार करने के लिए कैसे प्राप्त कर सकता हूं? धन्यवाद।


10
यह कोई goत्रुटि नहीं है , git"टर्मिनल प्रॉम्प्ट अक्षम" लौट रहा है। क्या आप git clone https://github.com/examplesite/myprivaterepoअपने लैपटॉप पर चला सकते हैं ?
जिमब

1
धन्यवाद। गिट क्लोन काम किया। फिर जाओ काम हो गया। क्या बात है? क्या मुझे हर बार इस तरह "पंप" करना है या क्या मैंने किसी चीज़ को गलत तरीके से कॉन्फ़िगर किया है?
टॉमकैम

1
@tomcam, आप ssh कीज को github खाते में जोड़ सकते हैं और जा सकते हैं, शुरू से काम करेगा, देखें help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: यह केवल तभी काम करता है जब वह रेपो क्लोन को पहले ssh पर https://github.com/रखता है , क्योंकि यह अनुरोध करेगा कि यदि आयात पथ मौजूद है। जीआईटी प्रक्रिया उपयोगकर्ता नाम / पासवर्ड के लिए संकेत देने में सक्षम होनी चाहिए, इसलिए लैपटॉप कॉन्फ़िगरेशन में कुछ अलग होना चाहिए - अलग शेल, अलग .gitconfig, एक एनवी चर, आदि
जिमब

इस सब ने मेरी मदद की है, लेकिन मुझे यकीन नहीं है कि उत्तर और / या हल के रूप में कैसे चिह्नित किया जाए। यहाँ मेरे पास अभी तक क्या है।
टोमकैम

जवाबों:


173

गो डिफॉल्ट रूप से "टर्मिनल प्रॉम्प्ट" को निष्क्रिय कर देता है। इसे git के पर्यावरण चर को सेट करके बदला जा सकता है:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo

306

मुझे यह बेहद मददगार लगा और इससे मेरी समस्या हल हो गई। यह कमांड आपके 2FA को अपना काम करने देगा (और आपको अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करने की परेशानी से बचाएगा):

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

स्रोत: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-ernername.html

यदि आप 2FA का उपयोग नहीं कर रहे हैं, तो आप अभी भी SSH का उपयोग कर सकते हैं और यह काम करेगा।

संपादित करें: --addध्वज को स्लटुनजे द्वारा सुझाए गए अनुसार जोड़ा गया ।


12
मैं सलाह देता हूं - एडेड फ्लैग को जोड़ें ताकि आप मौजूदा सेटिंग्स को ओवरराइट न करें, उदाहरण के लिए:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

धन्यवाद slatunje, ने आपकी प्रतिक्रिया के आधार पर मेरे उत्तर में ध्वज जोड़ा।
व्यिलियम जुड

5
यह सबसे अच्छा समाधान IMO है। यह अधिक सुरक्षित और कम प्रयास (एक बार सेटअप) उपयोगकर्ता नाम / पासवर्ड के बजाय एसएसएल कुंजी के लिए एसएसएच कुंजियों का उपयोग करने के लिए है
बोडेकर

1
विंडोज पर ऐसा मत करो। मैं त्रुटि के साथ समाप्त हुआ git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
शीतल शाह

1
लिनक्स के लिए भी काम करता है। अगर आप ssh
Globaly

38

1 - go getकमांड लाइन पर प्रमाणित करने से इंकार कर देगा। इसलिए आपको जीआईटी में क्रेडेंशियल्स को कैश करना होगा। क्योंकि मैं osx का उपयोग करता हूं मैं osxkeychain क्रेडेंशियल हेल्पर का उपयोग कर सकता हूं।

दूसरा मेरे लिए, मेरे पास 2FA सक्षम है और इस तरह से मैं अपने पासवर्ड का उपयोग नहीं कर सकता। इसके बजाय मुझे पासवर्ड के स्थान पर उपयोग करने के लिए एक व्यक्तिगत एक्सेस टोकन उत्पन्न करना था।

  1. सेटअप osxkeychain क्रेडेंशियल हेल्पर https://help.github.com/articles/caching-your-github-password-in-git/
  2. यदि आपके पासवर्ड का उपयोग करने के बजाय TFA का उपयोग कर रहे हैं, तो रेपो स्कोप के साथ एक व्यक्तिगत एक्सेस टोकन उत्पन्न करें https://github.com/settings/tokens
  3. git क्लोन को केवल एक निजी रेपो बनाता है ताकि वह पासवर्ड को कैश कर सके git clone https://github.com/user/private_repo और अपने github.com यूज़रनेम को यूज़रनेम और पासवर्ड के लिए उत्पन्न निजी एक्सेस टोकन का उपयोग कर सके।
  4. साख सुनिश्चित करने के लिए सिर्फ क्लोन किए गए रेपो और रेटेस्ट को हटा दिया गया था - git clone https://github.com/user/private_repoऔर इस बार के लिए क्रेडेंशियल नहीं पूछा गया था।

    1. गो गेट किसी भी रिपोज के साथ काम करेगा जिसे व्यक्तिगत एक्सेस टोकन एक्सेस कर सकता है। अनुमतियाँ अलग-अलग होने पर आपको अन्य खातों / टोकन के साथ चरणों को दोहराना पड़ सकता है।

1
मेरे पास 2FA है और इसने मेरे लिए काम किया - एक टोकन बनाया (पूर्ण निजी के साथ), git cloneअपने स्वयं के मौजूदा रिपोज में से एक किया (यह वास्तव में सार्वजनिक है), मेरे लिए संकेत usernameदिया गया था , मेरे GitHub उपयोगकर्ता नाम में डाल दिया, फिर डाल दिया उत्पन्न टोकन के लिए password- क्लोन किए गए रेपो को हटा दिया गया, फिर go getकमांड को फिर से चलाएँ और सब कुछ ठीक रहा - धन्यवाद! (OSX यहां भी)
एरिक डोरसी

3
यह वास्तव में बहुत अच्छा है क्योंकि आप टोकन के दायरे को केवल निजी रेपो के लिए "पढ़" सकते हैं, भले ही यह किसी तरह से जंगल में एक छवि में मिल जाए, वे केवल आपके कोड को पढ़ सकते हैं और चीजों को इसमें नहीं धकेल सकते हैं और आप कर सकते हैं टोकन को वास्तव में आसानी से रद्द करें। मुझे याद नहीं आ रहा है कि क्या उनके पास अभी तक ऑटो एक्सपायरी है।
ड्रैगन 788

16

अगर आप सिर्फ go getअसली काम करना चाहते हैं , और अपने काम के साथ आगे बढ़ें ...

बस निर्यात करें GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

अब यह आपको उपयोगकर्ता के लिए संकेत देगा / आपके शेष सत्र के लिए पास करेगा। अधिक स्थायी समाधान के लिए इसे अपने .profileया सेटअप में रखें git


14

यह शिकायत करता है क्योंकि इसके sshबजाय इसका उपयोग करने की आवश्यकता है httpsलेकिन आपका git अभी भी https के साथ कॉन्फ़िगर किया गया है। इसलिए मूल रूप से दूसरों के रूप में पहले उल्लेख किया है आप या तो संकेतों को सक्षम करने के लिए या के sshबजाय का उपयोग करने के लिए कॉन्फ़िगर करने की आवश्यकता है https। निम्नलिखित कार्य करके इसे करने का एक सरल तरीका:

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

या यदि आप पहले से ही उपयोग sshके साथ gitअपने मशीन में, आप सुरक्षित रूप से संपादित कर सकते हैं ~/.gitconfigऔर निचले भाग पर निम्न पंक्ति जोड़ने

नोट: यह सभी SVC, स्रोत संस्करण नियंत्रण को शामिल करता है, जो इस बात पर निर्भर करता है कि आप वास्तव में क्या उपयोग करते हैं, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/
  • यदि आप पासवर्ड पॉमप्स को निष्क्रिय रखना चाहते हैं, तो आपको पासवर्ड को कैश करना होगा। मैक, विंडोज़ या लिनक्स पर अपने गिथब पासवर्ड को कैश करने के तरीके के बारे में अधिक जानकारी के लिए, कृपया इस पृष्ठ पर जाएं ।

  • अपने github खाते में ssh को जोड़ने के बारे में अधिक जानकारी के लिए, कृपया इस पृष्ठ पर जाएँ ।

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

ऐसा करने के लिए, आपको GOPRIVATEपर्यावरण वैरिएबल सेट करने की आवश्यकता है जो यह नियंत्रित करता है कि कौन सा मॉड्यूल गो कमांड को निजी (सार्वजनिक रूप से उपलब्ध नहीं) मानता है और इसलिए प्रॉक्सी या चेकसम डेटाबेस का उपयोग नहीं करना चाहिए ।

चर path.Match, मॉड्यूल पथ उपसर्गों का एक अल्पविराम से अलग पैटर्न (गो के समान सिंटैक्स ) की सूची है। उदाहरण के लिए,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

या

go env -w GOPRIVATE=github.com/mycompany/*
  • निजी पैकेज / मॉड्यूल चेकसम सत्यापन मुद्दों को हल करने के तरीके के बारे में अधिक जानकारी के लिए, कृपया इस लेख को पढ़ें ।
  • 13 मॉड्यूल और नए संवर्द्धन के बारे में अधिक जानकारी के लिए, कृपया 1.13 मॉड्यूल रिलीज़ नोट देखें

एक आखिरी बात जिसका उल्लेख करना नहीं भूलते हैं, आप अभी भी go getप्रमाणित और प्राप्त करने के लिए कॉन्फ़िगर कर सकते हैं, आपको httpsकेवल निम्नलिखित सेटिंग को जोड़ने की आवश्यकता है$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • GitHub खातों के लिए, पासवर्ड एक व्यक्तिगत एक्सेस टोकन हो सकता है ।
  • यह कैसे करें के बारे में अधिक जानकारी के लिए, कृपया FAQ पृष्ठ देखें।

मुझे उम्मीद है कि यह समुदाय की मदद करता है और वर्णित मुद्दों को जल्दी से हल करने के लिए दूसरों के समय को बचाता है। यदि आप अधिक समर्थन या सहायता चाहते हैं तो कृपया टिप्पणी छोड़ दें।


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) केवल एक चीज है जो मेरे लिए काम करती है। मैं सुझाव दे सकता हूं कि इसे स्वयं के शीर्षक के तहत या फिर स्वयं के उत्तर में इसे थोड़ा और उजागर करने के लिए।
बर्नहार्ड बार्कर

1

यदि आप इस विकल्प के साथ अपने gitconfig को कॉन्फ़िगर करते हैं, तो आपको बाद में GitHub के अन्य रिपोज़ को क्लोन करने में समस्या होगी

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

इसके बजाय, मेरा सुझाव है कि आप इस विकल्प का उपयोग करें

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

और अपने निजी रिपॉजिटरी से एक्सेस टोकन जेनरेट करना न भूलें। जब आपका पासवर्ड दर्ज करने के लिए कहा जाए, तो बस एक्सेस टोकन पेस्ट करें। हैप्पी क्लोन :)


0

मुझे विंडोज़ की "त्रुटि" पर भी यही समस्या थी: त्वरित स्क्रिप्ट (एक्जिट कोड 1) को निष्पादित करने में विफल: घातक: ' https://github.com ' के लिए यूजरनेम नहीं पढ़ सका: लॉगिन डायलॉग के माध्यम से जीथब में प्रवेश करने की कोशिश में कोई त्रुटि नहीं। जब मैंने डायलॉग रद्द किया तो git ने मुझे कमांड लाइन में लॉगिन और पासवर्ड के लिए कहा और यह ठीक काम कर गया।

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