क्या कमिट पुश करने के लिए GitHub क्रेडेंशियल्स को कैश करने का एक तरीका है?


1867

मैंने हाल ही में GitHub पर (फ़ायरवॉल मुद्दों के कारण) https: // पर अपनी रिपॉजिटरी को सिंक्रनाइज़ करने के लिए स्विच किया, और यह हर बार पासवर्ड मांगता है।

क्या हर बार प्रमाणित करने के बजाय क्रेडेंशियल्स को कैश करने का एक तरीका है git push?



2
अब आप _netrcअपनी क्रेडेंशियल वाली फ़ाइल को एन्क्रिप्ट करने के लिए एक क्रेडेंशियल हेल्पर का उपयोग कर सकते हैं । देखें नीचे मेरा उत्तर । मैंने पाया कि सुरक्षित git-credential-winstore.exe(मेमोरी कैश) जो कि विंडोज पर थोड़ी छोटी है।
VonC


git-credential-winstoreविंडोज के लिए सबसे अच्छा काम किया। छोटी गाड़ी क्या है? Ssh को सेट करना एक पसंदीदा विकल्प है, हालांकि मैंने इसे कई बार किया है, यह एक तरह से अधिक त्रुटि प्रवण है और कभी-कभी केवल सादा काम नहीं करता है जब आपको कई मेजबानों से कनेक्ट करना पड़ता है।
ब्रॉन डेविस

2
"SSH सर्टिफिकेट" से मेरा मतलब है कि "SSH निजी कुंजी।"
बजे माइकल मिओर

जवाबों:


2369

Git संस्करण 1.7.9 और बाद के संस्करण के साथ

Git 1.7.9 (जनवरी 2012 के अंत में जारी) के बाद से, Git में एक नीट मैकेनिज्म है, जो HTTP / HTTPS के लिए अपना पासवर्ड टाइप करने से बचने के लिए, क्रेडेंशियल हेल्पर्स कहलाता है । ( इस नई सुविधा को नीचे टिप्पणी में इंगित करने के लिए डैज़ोनिक के लिए धन्यवाद ।)

Git 1.7.9 या इसके बाद के संस्करण के साथ, आप बस निम्नलिखित क्रेडेंशियल सहायकों में से एक का उपयोग कर सकते हैं:

git config --global credential.helper cache

... जो 15 मिनट के लिए आपके पासवर्ड को मेमोरी में कैश्ड (डिफ़ॉल्ट रूप से) कैश करने के लिए कहता है। आप इसके साथ एक लंबा समय निर्धारित कर सकते हैं:

git config --global credential.helper "cache --timeout=3600"

( लिनक्स के लिए GitHub सहायता पृष्ठ में उस उदाहरण का सुझाव दिया गया था ।) आप अपने क्रेडेंशियल को स्थायी रूप से संग्रहीत कर सकते हैं यदि ऐसा है तो नीचे दिए गए अन्य उत्तरों को देखें।

GitHub की मदद यह भी बताती है कि यदि आप Mac OS X पर हैं और Git को स्थापित करने के लिए Homebrew का उपयोग करते हैं, तो आप इसके साथ देशी Mac OS X कीस्टोर का उपयोग कर सकते हैं:

git config --global credential.helper osxkeychain

विंडोज के लिए, विंडोज के लिए Git क्रेडेंशियल मैनेजर नामक एक सहायक है या msysgit में wincred है

git config --global credential.helper wincred # obsolete

Windows 2.7.3+ के लिए Git के साथ (मार्च 2016):

git config --global credential.helper manager

लिनक्स के लिए, आप उपयोगgnome-keyring कर सकते हैं (या KWallet जैसे अन्य कीरिंग कार्यान्वयन)।

1.7.9 से पहले Git संस्करणों के साथ

1.7.9 से पहले Git के संस्करणों के साथ, यह अधिक सुरक्षित विकल्प उपलब्ध नहीं है, और आपको उस URL को बदलने की आवश्यकता होगी जो आपके originरिमोट का उपयोग इस फैशन में पासवर्ड को शामिल करने के लिए करता है:

https://you:password@github.com/you/example.git

... दूसरे शब्दों :passwordमें उपयोगकर्ता नाम के बाद और से पहले @

आप अपने originरिमोट के लिए एक नया URL सेट कर सकते हैं :

git config remote.origin.url https://you:password@github.com/you/example.git

सुनिश्चित करें कि आप उपयोग करते हैं https, और आपको पता होना चाहिए कि यदि आप ऐसा करते हैं, तो आपका GitHub पासवर्ड आपकी .gitनिर्देशिका में प्लेनटेक्स्ट में संग्रहीत किया जाएगा , जो स्पष्ट रूप से अवांछनीय है।

किसी भी Git संस्करण के साथ (अच्छी तरह से, संस्करण 0.99 के बाद से)

एक वैकल्पिक तरीका यह है कि आप अपने यूज़रनेम और पासवर्ड को अपनी ~/.netrcफ़ाइल में रखें, हालाँकि, पासवर्ड को दूरस्थ URL में रखने के साथ, इसका मतलब है कि आपका पासवर्ड सादे पाठ में डिस्क पर संग्रहीत किया जाएगा और इस प्रकार कम सुरक्षित है और अनुशंसित नहीं है। हालाँकि, यदि आप इस दृष्टिकोण को अपनाना चाहते हैं, तो निम्न पंक्ति को अपने साथ जोड़ें ~/.netrc:

machine <hostname> login <username> password <password>

... की जगह <hostname>सर्वर का होस्ट नाम के साथ, और <username>और <password>अपने यूज़रनेम और पासवर्ड के साथ। उस फ़ाइल पर प्रतिबंधात्मक फ़ाइल सिस्टम अनुमतियाँ सेट करना भी याद रखें:

chmod 600 ~/.netrc

ध्यान दें कि विंडोज पर, इस फ़ाइल को बुलाया जाना चाहिए _netrc, और आपको अधिक विवरण देखने के लिए% HOME% पर्यावरण चर को परिभाषित करने की आवश्यकता हो सकती है:


72
सादे पाठ में अपना पासवर्ड न रखें। Git 1.7.9 के रूप में आप क्रेडेंशियल हेल्पर्स का उपयोग कर सकते हैं। git config --global credential.helper osxkeychainOS X पर। अन्य OS के लिए help.github.com/articles/set-up-git
dazonic

6
एफडब्ल्यूआईडब्ल्यू, ऑक्स कीचेन सामान बेस जीआईटी स्रोत कोड का हिस्सा है, यह ब्रू या मैकपोर्ट्स का एक विशेष घटक या महीने का स्वाद नहीं है। और आपको खरोंच से गिट बनाने की भी आवश्यकता नहीं है - बस सीडी कंट्रीब / क्रेडेंशियल / ऑक्सोक्चैचिन / और रन बनाएं।
सिंथेसाइजरपटेल

2
दो फैक्टर ऑथेंटिकेशन के साथ आपको यह प्रयोग करना होगा कि गिथब पर्सन एक्सेस टोकन को क्या कहता है । वास्तव में आपको हमेशा एक का उपयोग करना चाहिए, एक पासवर्ड के विपरीत आप इसे नियंत्रित कर सकते हैं कि यह किस एक्सेस को देता है। बस url में पासवर्ड बदलें ताकि आप समाप्त कर सकें https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git। यह सादा पाठ पासवर्ड को डिस्क पर संग्रहीत लगभग सुरक्षित उपयोग करने के लिए पर्याप्त बनाता है।
रसेल स्टुअर्ट

12
git config --global credential.helper cacheखिड़कियों पर काम नहीं करता है: stackoverflow.com/questions/11693074/… विंडोज पर gitcredentialstore का उपयोग करें खुश रहो
सेबस्टियन जे।

8
इस समय को अनंत तक सेट करने का कोई तरीका?
सूदो

720

आप निम्नलिखित का उपयोग करके अपने क्रेडेंशियल्स को स्थायी रूप से स्टोर कर सकते हैं:

git config credential.helper store

नोट: जबकि यह सुविधाजनक है, गिट आपकी परियोजना निर्देशिका ("घर" निर्देशिका के लिए नीचे देखें) के तहत एक स्थानीय फ़ाइल (.git- क्रेडेंशियल्स) में स्पष्ट पाठ में आपके क्रेडेंशियल्स को संग्रहीत करेगा। यदि आपको यह पसंद नहीं है, तो इस फ़ाइल को हटा दें और कैश विकल्प का उपयोग करके स्विच करें।

यदि आप चाहते हैं कि हर बार जब आप दूरस्थ रिपॉजिटरी से कनेक्ट करने की आवश्यकता हो, तो आपको क्रेडेंशियल के लिए पूछने के लिए फिर से शुरू करें, आप इस स्थिति को प्राप्त कर सकते हैं:

git config --unset credential.helper

प्रोजेक्ट निर्देशिका के विपरीत .git-credentialsअपनी %HOME%निर्देशिका में पासवर्ड संग्रहीत करने के लिए: --globalध्वज का उपयोग करें

git config --global credential.helper store

7
Windows पर, आप एक सहायक उपयोगिता को कॉन्फ़िगर कर बातें विंडोज Creditial स्टोर में अपना Git पासवर्ड एन्क्रिप्टेड संस्करण स्टोर करने के लिए डाउनलोड कर सकते हैं, को देखने के confluence.atlassian.com/display/STASH/...
कंटंगा

76
मैंने पाया कि मुझे --global निर्दिष्ट करना था या यह वर्तमान रिपॉजिटरी में सेटिंग्स को स्टोर करने की कोशिश करेगा:git config --global credential.helper store
ब्रायन गॉर्डन

6
स्थायी रूप से भंडारण करने के बजाय कैश क्यों करेंगे? कंप्यूटर या कुछ साझा करना?
माइकल जे। कैलकिंस

2
@BrianGordon मैं विंडोज पर जीआईटी 1.9.5 का उपयोग कर रहा हूं, और --globalझंडा बेमानी था। इस ध्वज के बिना भी, क्रेडेंशियल फ़ाइल %USER_HOME%निर्देशिका में बनाई गई थी ।
jFrenetic

2
यदि सादे पाठ में संग्रहीत नहीं किया जाता है, तो इसके साथ क्या संरक्षित है? आपका पासवर्ड? क्या यह तब नहीं होगा जब आप गिट से जुड़ने के लिए आपसे अपना पासवर्ड पूछेंगे? क्या एक पासवर्ड दर्ज करने के लिए दूसरा पासवर्ड थोड़ा अजीब नहीं है?
क्रंचर

101

TLDR; Git 1.8.3+ के साथ एन्क्रिप्टेड netrc फ़ाइल का उपयोग करें ।

Git रिपॉजिटरी HTTPS URL के लिए पासवर्ड सेव करना Windows पर ~/.netrc(Unix) या %HOME%/_netrc(नोट करें _) के साथ संभव है ।

लेकिन : वह फ़ाइल आपके पासवर्ड को सादे पाठ में संग्रहीत करेगी।

समाधान : उस फ़ाइल को GPG (GNU गोपनीयता गार्ड) के साथ एन्क्रिप्ट करें , और Git को डिक्रिप्ट करें इसे हर बार पासवर्ड ( push/ pull/ fetch/ cloneसंचालन के लिए) की आवश्यकता होती है।


नोट: Git 2.18 (Q2 2018) के साथ, अब आप एन्क्रिप्टेड .netrcफ़ाइल को डिक्रिप्ट करने के लिए उपयोग किए जाने वाले GPG को कस्टमाइज़ कर सकते हैं ।

देखें प्रतिबद्ध 786ef50 , f07eeed प्रतिबद्ध द्वारा (12 मई 2018) लुइस Marsano ( ``)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 017b7c5 , 30 मई 2018)

git-credential-netrc: gpgविकल्प स्वीकार करें

git-credential-netrcgpggpg.program विकल्प की परवाह किए बिना ' ' के साथ डिक्रिप्ट करने के लिए हार्डकोड किया गया था ।
यह डिबियन जैसे वितरण पर एक समस्या है जो आधुनिक GnuPG को कुछ और कहते हैं, जैसे ' gpg2'


विंडोज के लिए चरण-दर-चरण निर्देश

विंडोज के साथ:

(Git के gpg.exeवितरण में एक है, लेकिन पूर्ण GPG संस्थापन का उपयोग करने में एक शामिल है gpg-agent.exe, जो आपकी GPG कुंजी से संबंधित आपके पासफ़्रेज़ को याद रखेगा।)

  • इंस्टॉल करें gpg4Win Lite, न्यूनतम gnupg कमांड-लाइन इंटरफ़ेस ( सबसे हाल ही में लेंgpg4win-vanilla-2.X.Y-betaZZ.exe ), और GPG इंस्टॉलेशन मोड के साथ अपना PATH पूरा करें:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(ध्यान दें ' copy' कमांड: Git आदेश पर अमल करने के लिए एक बैश स्क्रिप्ट की आवश्यकता होगी ' gpg' के बाद से। gpg4win-vanilla-2के साथ आता है gpg2.exe, तो आप इसे नकल करने की जरूरत है।)

  • GPG कुंजी बनाएं या आयात करें, और इस पर भरोसा करें:

    gpgp --import aKey
    # or
    gpg --gen-key

(उस कुंजी को पासफ़्रेज़ रखना सुनिश्चित करें।)

  • उस चाबी पर भरोसा रखो

  • अपने भीतर एक निर्देशिका में क्रेडेंशियल सहायक स्क्रिप्ट स्थापित करें %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(खबरदार: स्क्रिप्ट का नाम बदलकर Git 2.25.x / 2.26 रखा गया है, नीचे देखें)

(हां, यह एक बैश स्क्रिप्ट है, लेकिन यह विंडोज पर काम करेगा क्योंकि इसे गिट द्वारा बुलाया जाएगा।)

  • स्पष्ट पाठ में _netrc फ़ाइल बनाएं

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

( आपके द्वारा उपयोग किए जाने वाले URL के आधार पर ' protocol' भाग: ' http' या ' https' को न भूलें ।)

  • उस फ़ाइल को एन्क्रिप्ट करें:

    gpg -e -r a_recipient _netrc

(अब आप कर सकते हैं हटाना_netrc ही रखने फ़ाइल, _netrc.gpgएन्क्रिप्टेड है।)

  • उस एन्क्रिप्टेड फ़ाइल का उपयोग करें:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(नोट ' /': C:\path\to...बिल्कुल काम नहीं करेगा।) (आप पहली बार में उपयोग कर सकते हैं-v -d देख सकते हैं कि क्या चल रहा है।)

अब से, HTTP (S) URL का उपयोग करने वाले किसी भी Git कमांड को प्रमाणीकरण की आवश्यकता होती है जो उस _netrc.gpgफ़ाइल को डिक्रिप्ट करेगा और जिस सर्वर से आप संपर्क कर रहे हैं उससे जुड़े लॉगिन / पासवर्ड का उपयोग करें। पहली बार, GPG आपसे फ़ाइल को डिक्रिप्ट करने के लिए आपकी GPG कुंजी के पासफ़्रेज़ के लिए कहेगा। दूसरी बार, gpg-agent ने स्वतः लॉन्च किया पहले GPG कॉल द्वारा से आपके लिए वह पासफ़्रेज़ प्रदान करेगा।

इस तरह, आप एक फ़ाइल में कई यूआरएल / लॉगिन / पासवर्ड याद कर सकते हैं, और यह आपके डिस्क पर एन्क्रिप्टेड संग्रहीत है।
मुझे यह "कैश" सहायक की तुलना में अधिक सुविधाजनक लगता है, जहां आपको याद रखने की आवश्यकता होती है और आपकी प्रत्येक दूरस्थ सेवाओं के लिए एक अलग पासवर्ड टाइप करने के लिए (एक बार प्रति पासवर्ड) मेमोरी में कैश्ड होने के लिए कहा जाता है।


Git 2.26 (Q1 2020) के साथ, उपयोग करने के लिए नमूना क्रेडेंशियल सहायक .netrcबॉक्स से बाहर काम करने के लिए अद्यतन किया गया है। पैच / चर्चा देखें

Denton लियू ( ) द्वारा 6579d93 , 1c78c78 (20 दिसंबर 2019) के लिए प्रतिबद्ध देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 1fd27f8 , 25 दिसंबर 2019)Denton-L
gitster

contrib/credential/netrc: बनाना PERL_PATH विन्यास करें

साइन-ऑफ-बाय: डेंटन लियू

पर्ल दुभाषिया के लिए शबंग मार्ग git-credential-netrcहार्डकोड किया गया था।
हालाँकि, कुछ उपयोगकर्ताओं को यह एक अलग स्थान पर स्थित हो सकता है और इस प्रकार, स्क्रिप्ट को मैन्युअल रूप से संपादित करना होगा।

.perlइसे टेम्पलेट के रूप में दर्शाने के लिए स्क्रिप्ट में एक उपसर्ग जोड़ें और उत्पन्न संस्करण को अनदेखा करें।
में वृद्धि Makefileइतना है कि यह उत्पन्न करता है git-credential-netrcसेgit-credential-netrc.perl अन्य पर्ल लिपियों की तरह ।

Makefile व्यंजनों को बेशर्मी से चुराया गया था contrib/mw-to-git/Makefile

तथा:

2.26 (Q1 2020) के साथ, .netrc का उपयोग करने के लिए नमूना क्रेडेंशियल सहायक बॉक्स से बाहर काम करने के लिए अद्यतन किया गया है।

Denton लियू ( ) द्वारा 6579d93 , 1c78c78 (20 दिसंबर 2019) के लिए प्रतिबद्ध देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 1fd27f8 , 25 दिसंबर 2019)Denton-L
gitster

contrib/credential/netrc: रेपो के बाहर काम करते हैं

साइन-ऑफ-बाय: डेंटन लियू

वर्तमान में, git-credential-netrcगिट रिपॉजिटरी के बाहर काम नहीं करता है। यह निम्न त्रुटि के साथ विफल रहता है:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

हालांकि, एक रिपॉजिटरी के भीतर होने की कोई वास्तविक वजह नहीं है। क्रेडेंशियल हेल्पर्स को रिपॉजिटरी के बाहर भी ठीक काम करने में सक्षम होना चाहिए।

गैर-स्व-संस्करण को कॉल करें config()ताकि git-credential-netrcअब रिपॉजिटरी के भीतर चलने की आवश्यकता न हो।

जेफ किंग ( peff) कहते हैं:

मुझे लगता है कि आप एक gpg-एन्क्रिप्टेड का उपयोग कर रहे हैं netrc(यदि नहीं, तो आपको शायद बस उपयोग करना चाहिए credential-store)।
"केवल पढ़ने के लिए" पासवर्ड के उपयोग के लिए, मुझे लगता है कि passयह थोड़ा अच्छा है

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"

1
linux पर एक ही चीज़ की कोशिश कर रहा है .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" .. और मुझे "git: 'क्रेडेंशियल-netrc' नहीं है git कमांड। 'git --help' देखिए "
sunny

4
@ sunny वह है जो इसके curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcलिए है: आपको git-credential-netrcअपने पथ ( $PATH) में कहीं भी कॉपी करने की आवश्यकता है , ताकि git को ' credential-netrc' कॉल करने में सक्षम होने के लिए ।
वॉन

ठीक है, _netrcमेरे लिए एक Windows 7पीसी पर काम नहीं किया , लेकिन तर्क - वितर्क के साथ youtube-dl के.netrc लिए काम किया । --netrc
इयूलियन ओनोफ्रेई

@VonC वर्तमान URL प्रतीत हो रहा है https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(सात साल बाद पाइपिंग) G
Gwyneth Llewelyn

1
@GwynethLlewelyn धन्यवाद। मैंने उसी के अनुसार उत्तर संपादित किया है। यदि आप कोई अन्य अप्रचलित जानकारी देखते हैं तो इसे स्वयं संपादित करने में संकोच न करें।
VonC

43

HTTPS URL में उपयोगकर्ता क्रेडेंशियल्स को संग्रहीत करने का एक आसान, पुराने ढंग का तरीका है:

https://user:password@github.com/...

आप URL को बदल सकते हैं git remote set-url <remote-repo> <URL>

उस दृष्टिकोण के लिए स्पष्ट नकारात्मक यह है कि आपको पासवर्ड को सादे पाठ में संग्रहीत करना होगा। आप अभी भी उपयोगकर्ता नाम ( https://user@github.com/...) दर्ज कर सकते हैं जो कम से कम आपको आधी परेशानी से बचाएगा।

आप SSH पर स्विच करना या GitHub क्लाइंट सॉफ़्टवेयर का उपयोग करना पसंद कर सकते हैं।


2
उपयोगकर्ता नाम / पासवर्ड को इनकोड करना पड़ सकता है, देखें stackoverflow.com/a/34611311/3906760
MrTux

43

एक क्रेडेंशियल स्टोर का उपयोग करें।

OS X और Linux पर Git 2.11+ के लिए , Git का अंतर्निहित क्रेडेंशियल स्टोर का उपयोग करें :

git config --global credential.helper libsecret

विंडोज पर msysgit 1.7.9+ के लिए :

git config --global credential.helper wincred

OS X उपयोग पर Git 1.7.9+ के लिए:

git config --global credential.helper osxkeychain

2
मुझे यकीन है कि यह जाने का रास्ता है, लेकिन मुझे उदास रूप से एक त्रुटि मिलती है:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
कोडप्लेब

1
धन्यवाद, लेकिन मुझे वही त्रुटि किसी भी तरह मिलती है। क्या मुझसे कुछ गलत हो रही है? मैं कमांड टाइप करता हूं और कुछ नहीं होता है। जैसे ही मैं धक्का देता हूं, मुझे क्रेडेंशियल्स के लिए कहा जाता है, जिसे मैं सफलतापूर्वक सम्मिलित करता हूं, लेकिन मुझे त्रुटि मिलती है, कि ऐसा करने के बाद यह एक git कमांड नहीं है।
कोडप्लेब

2
लिनक्स पर काम करने से पहले libsecret आपको इन चरणों को करने की आवश्यकता है: stackoverflow.com/a/40312117/775800
Lavamantis 21

1
एक और बात - अगर आपके पास जीथब पर 2FA सक्षम है, तो आपका पासवर्ड काम नहीं करेगा। लेकिन आप अपने जीथब "सेटिंग" पृष्ठ पर एक व्यक्तिगत एक्सेस टोकन बना सकते हैं और यह टोकन आपके पासवर्ड के रूप में काम करता है। github.com/github/hub/issues/822
लैवामंटिस

3
सुरक्षा समस्या: Windows क्रेडेंशियल प्रबंधक आपके सादे पासवर्ड को आपके विंडोज खाते में लॉग इन किए गए किसी भी व्यक्ति के लिए सुलभ बनाता है। उन्हें बस इतना करने की ज़रूरत है कि क्रेडेंशियल मैनेजर को एक अनुरोध भेजें जैसे कि printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( अधिक विवरण यहां )। आपको हमेशा इसके साथ एक व्यक्तिगत एक्सेस टोकन का उपयोग करना चाहिए , और निश्चित रूप से अपने GitHub खाते पर 2FA का उपयोग करें।
cjs

40

आप बस उपयोग कर सकते हैं

git config credential.helper store

जब आप अगली बार पुल या पुश के साथ पासवर्ड दर्ज करते हैं, तो इसे फ़ाइल में संग्रहीत किया जाएगा। इसे सादा पाठ के रूप में-साख (थोड़ा असुरक्षित, लेकिन बस इसे एक संरक्षित फ़ोल्डर में डाल दिया जाता है)।

और यह इस पृष्ठ पर कहा गया है:

git-credential-store


3
Windows 2.7.3 (मार्च 2016) के लिए Git के लिए: github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , जो git config credential.helper managerइसके बजाय
VONC

23

यह मेरे लिए तुरंत स्पष्ट नहीं था कि मुझे पहले सहायक को डाउनलोड करने की आवश्यकता थी! मुझे एटिटैशियन के स्थायी रूप से Git रिपॉजिटरी के साथ प्रमाणित करने में क्रेडेंशियल.हेलपर डाउनलोड मिला ।

उद्धरण:

यदि आप ओएस एक्स पर क्रेडेंशियल कैशिंग के साथ गिट का उपयोग करना चाहते हैं, तो इन चरणों का पालन करें:

द्विआधारी गिट-क्रेडेंशियल-ओक्सेक्सचैन डाउनलोड करें।

बाइनरी निष्पादन योग्य है यह सुनिश्चित करने के लिए नीचे कमांड चलाएँ:

chmod a+x git-credential-osxkeychain

निर्देशिका में रखो /usr/local/bin

नीचे कमांड चलाएँ:

git config --global credential.helper osxkeychain

23

बस URL के भाग के रूप में लॉगिन क्रेडेंशियल शामिल करें:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

नोट: मैं इस पद्धति की अनुशंसा नहीं करता, लेकिन यदि आप जल्दी में हैं और कुछ भी काम नहीं करता है, तो आप इस पद्धति का उपयोग कर सकते हैं।


12
यह आपके ईमेल आईडी में% 40 के साथ @ भागने में काम आएगा
तरुण गुप्ता

अगर हमारे पास ईमेल आईडी में '+' है तो क्या होगा? मैंने वही भागने की कोशिश की लेकिन धक्का ने कहा 'रेपो नहीं मिला'
किलोजॉय

4
+31 के बजाय% 2B है
तरुण गुप्ता

पासवर्ड को प्लेनटेक्स्ट में स्टोर करना और आसानी से सुलभ होना एक इष्टतम समाधान नहीं हो सकता है।
को गतिविधि

20

GNU / Linux सेटअप पर, एक ~ / .netrc बहुत अच्छी तरह से काम करता है:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

यह निर्भर कर सकता है कि HTTPS ट्रांसपोर्ट के लिए Git कौन से नेटवर्क लाइब्रेरी का उपयोग कर रहा है ।


4
यह भी सुनिश्चित करें chmod 0600 ~/.netrc
पूलि

बस उबंटू netrc मैनपेज पर एक लिंक छोड़ना चाहते हैं । मुझे इसे किसी अन्य उपयोगकर्ता (/home/git/.netrc) के लिए बनाने की आवश्यकता है, फिर उस उपयोगकर्ता के लिए स्वामित्व बदलें।
zacharydl

17

विंडोज के लिए आप Git क्रेडेंशियल मैनेजर (GCM) प्लगइन का उपयोग कर सकते हैं । यह वर्तमान में Microsoft द्वारा बनाए रखा गया है। अच्छी बात यह है कि यह विंडोज़ क्रेडेंशियल स्टोर में पासवर्ड की बचत करता है, न कि सादे टेक्स्ट की तरह।

प्रोजेक्ट के रिलीज़ पृष्ठ पर एक इंस्टॉलर है । यह अंतर्निहित प्रबंधक के साथ विंडोज के लिए गिट के आधिकारिक संस्करण को भी स्थापित करेगा । यह दो-कारक प्रमाणीकरण की अनुमति देता है GitHub (और अन्य सर्वर) के लिए । और शुरू में प्रवेश करने के लिए एक ग्राफिकल इंटरफ़ेस है।

साइगविन उपयोगकर्ताओं (या पहले से ही विंडोज के लिए आधिकारिक गिट का उपयोग करने वाले उपयोगकर्ता) के लिए, आप मैन्युअल इंस्टॉल को पसंद कर सकते हैं। रिलीज़ पृष्ठ से ज़िप पैकेज डाउनलोड करें । पैकेज निकालें, और फिर install.cmdफ़ाइल चलाएँ । यह आपके ~/binफ़ोल्डर में स्थापित हो जाएगा । (सुनिश्चित करें कि आपकी ~/binनिर्देशिका आपके पेट में है।) फिर आप इस कमांड का उपयोग करके इसे कॉन्फ़िगर करें:

git config --global credential.helper manager

Git तब चलाएगा git-credential-manager.exeजब किसी सर्वर को प्रमाणित करेगा ।


3
आपके खाते में लॉग इन किया गया कोई भी व्यक्ति पासवर्ड के प्लेनटेक्स्ट तक आसानी से पहुंच सकता है। उन्हें बस इतना करने की ज़रूरत है कि क्रेडेंशियल मैनेजर को एक अनुरोध भेजें जैसे कि printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( अधिक विवरण यहां )। आपको हमेशा इसके साथ एक व्यक्तिगत एक्सेस टोकन का उपयोग करना चाहिए , और निश्चित रूप से अपने GitHub खाते पर 2FA का उपयोग करें।
cjs

13

यदि आप अपने पासवर्ड को प्लेनटेक्स्ट में स्टोर नहीं करना चाहते हैं जैसे मार्क ने कहा, आप पुश करने के लिए अलग-अलग GitHub URL का उपयोग करने के लिए ला सकते हैं। आपकी कॉन्फ़िगरेशन फ़ाइल में, नीचे [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

यह तब भी पासवर्ड मांगेगा जब आप धक्का देंगे, लेकिन तब नहीं जब आप लाएंगे, कम से कम ओपन सोर्स प्रोजेक्ट्स के लिए।


12

OAuth

आप अपना स्वयं का व्यक्तिगत एपीआई टोकन ( OAuth ) बना सकते हैं और इसे उसी तरह उपयोग कर सकते हैं जैसे आप अपने सामान्य क्रेडेंशियल्स (पर:) का उपयोग करेंगे /settings/tokens। उदाहरण के लिए:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

एक और तरीका है अपने उपयोगकर्ता / पासवर्ड को विंडोज पर ~/.netrc( _netrcजैसे) कॉन्फ़िगर करना

machine github.com
login USERNAME
password PASSWORD

HTTPS के लिए, अतिरिक्त पंक्ति जोड़ें:

protocol https

एक विश्वसनीय सहायक

HTTPS का उपयोग करते समय Git में अपना GitHub पासवर्ड कैश करने के लिए , आप GitHub से बात करने के लिए हर बार अपने GitHub उपयोगकर्ता नाम और पासवर्ड को याद रखने के लिए Git को बताने के लिए एक क्रेडेंशियल सहायक का उपयोग कर सकते हैं ।

  • मैक: git config --global credential.helper osxkeychain( osxkeychain helperआवश्यक है),
  • खिड़कियाँ: git config --global credential.helper wincred
  • लिनक्स और अन्य: git config --global credential.helper cache

सम्बंधित:


10

आप क्रेडेंशियल हेल्पर्स का उपयोग कर सकते हैं।

git config --global credential.helper 'cache --timeout=x'

xसेकंड की संख्या कहाँ है।


7
यह सेकंड की संख्या है ... कुछ प्रतिभाओं ने इसे मिलीसेकंड के रूप में अद्यतन किया और सभी ने इसे बिना जाँच के मंजूरी दे दी। यदि आपको उत्तर नहीं पता है तो कृपया लोगों को गुमराह न करें। धन्यवाद!
चरण

क्या आप किसी ऐसी जगह का लिंक दे सकते हैं store, जहां cacheऔर अन्य सामान्य चीजों को सूचीबद्ध और समझाया गया हो?
नोटिनिस्टल

3
इस तथ्य का उल्लेख करने के लिए ध्यान रखें कि यह जैक गंदगी करता है जब तक कि आप पहले प्रबंधक के रूप में 'कैश' का उपयोग करने के लिए किसी अन्य विशिष्ट कमांड को कॉल नहीं करते हैं? यह सामान बहुत गूढ़ है, इनमें से सभी उत्तर अपूर्ण हैं, और उनमें से कोई भी काम नहीं करता है। अविश्वसनीय रूप से निराशा होती है। इसके बजाय इसे देखें: stackoverflow.com/a/24800870/88409
Triynko

10

आपके द्वारा रिपॉजिटरी क्लोन करने के बाद repo, आप repo/.git/configनीचे दिए गए कुछ कॉन्फ़िगरेशन को संपादित और जोड़ सकते हैं:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

फिर आपको बार username- passwordबार नहीं पूछा जाएगा ।


मेरे साथ काम करता है helper = manager(लेकिन मुझे पहले पुश के लिए उपयोगकर्ता नाम + रेपो के लिए कहा गया है)।
स्टीफन लॉरेंट

हेल्पर = मैनेजर के साथ मुझे त्रुटि हो रही है क्रेडेंशियल-मैनेजर एक git कमांड नहीं है
कपिल

दुर्भाग्य से git कॉन्फिग फाइल में पासवर्ड को अनदेखा करता है। .git_credentials with क्रेडेंशियल.स्टोर एकमात्र विकल्प है।
अवामेंडर

9

मुझे पता है कि यह एक सुरक्षित समाधान नहीं है, लेकिन कभी-कभी आपको बस एक सरल समाधान की आवश्यकता होती है - बिना कुछ और स्थापित किए। और सहायक = स्टोर के बाद से ने मेरे लिए काम नहीं किया, इसलिए मैंने एक डमी हेल्पर बनाया:

एक स्क्रिप्ट बनाएं और इसे अपने यूजर्स बिन फोल्डर में डालें , यहां क्रेडफेक नाम दिया गया है , यह स्क्रिप्ट आपके यूजरनेम और आपके पासवर्ड को प्रदान करेगी:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

इसे निष्पादित करें:

chmod u+x /home/mahuser/bin/credfake

फिर इसे git में कॉन्फ़िगर करें:

git config --global credential.helper /home/mahuser/bin/credfake

(या बिना रेपो-केवल एक रेपो के लिए इसका उपयोग करें)

और - voilá - git इस यूजर + पासवर्ड का उपयोग करेगा।


मैं सहमत हूँ। सरल (यदि असुरक्षित) समाधान वास्तव में। +1, जब तक आप जानते हैं कि आप क्या कर रहे हैं।
वॉन

7

खाता पासवर्ड के बजाय एक प्रमाणीकरण टोकन का उपयोग किया जाना चाहिए। GitHub सेटिंग्स / एप्लिकेशन पर जाएं और फिर एक व्यक्तिगत एक्सेस टोकन बनाएं। टोकन का उपयोग उसी तरह किया जा सकता है जैसे पासवर्ड का उपयोग किया जाता है।

टोकन का उद्देश्य उपयोगकर्ताओं को प्रोजेक्ट कार्य के लिए खाता पासवर्ड का उपयोग नहीं करने देना है। प्रशासन कार्य करते समय केवल पासवर्ड का उपयोग करें, जैसे कि नए टोकन बनाना या पुराने टोकन को रद्द करना।


एक टोकन या पासवर्ड के बजाय जो एक GitHub खाते में उपयोगकर्ता की संपूर्ण पहुंच प्रदान करता है, एक परियोजना विशिष्ट परिनियोजन कुंजी का उपयोग एकल प्रोजेक्ट रिपॉजिटरी तक पहुंच प्रदान करने के लिए किया जा सकता है। निम्न चरणों में इस भिन्न कुंजी का उपयोग करने के लिए एक Git प्रोजेक्ट को कॉन्फ़िगर किया जा सकता है, जब आप अभी भी अन्य Git खातों या प्रोजेक्ट्स को अपने क्रेडिट कार्ड के साथ एक्सेस कर सकते हैं:

  1. SSH कॉन्फ़िगरेशन फ़ाइल लिखें Host, जिसमें IdentityFileपरिनियोजन कुंजी के लिए, हो सकता है UserKnownHostsFile, और शायद User(हालांकि मुझे लगता है कि आपको इसकी आवश्यकता नहीं है)।
  2. एक SSH आवरण खोल स्क्रिप्ट लिखें जो वस्तुतः है ssh -F /path/to/your/config $*
  3. GIT_SSH=/path/to/your/wrapperअपने सामान्य Git कमांड के सामने प्रेप करें । यहां git remote(मूल) git@github.com:user/project.gitप्रारूप का उपयोग करना होगा ।

7

सुरक्षा के लिए क्रेडेंशियल्स का उपयोग करना बेहतर है, लेकिन आप इसे कैश का उपयोग करके कुछ समय के लिए रख सकते हैं:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

आपकी साख 3600 सेकंड के लिए बच जाएगी।


इसका मतलब 3600 सेकंड के बाद, हमें फिर से पासवर्ड डालना होगा ??? उन्हें स्थायी रूप से कैसे बचाया जाए?
होआंगवू

$ Git config credential.helper 'कैश --timeout = 3600' त्रुटि: कॉन्फ़िग फ़ाइल लॉक नहीं कर सके .git / config: ऐसी कोई फ़ाइल या निर्देशिका
PlantationGator

इसने काम किया: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@ तमा मुझे पता है कि यह तीन साल हो गए हैं, लेकिन आप बस बाहर छोड़ सकते हैं --timeoutऔर क्रेडेंशियल्स हमेशा के लिए संग्रहीत किए जाएंगे।
नील चौधरी

क्या यह डॉकटर कंटेनर (आधारित windowsservercore) के अंदर काम करेगा ?
पीटर मोर्टेंसन

5

अगर आप टू-फैक्टर ऑथेंटिकेशन का उपयोग कर रहे हैं तो चीजें थोड़ी अलग हैं । चूँकि मुझे कहीं और एक अच्छा जवाब नहीं मिला, इसलिए मैं यहाँ एक स्टिक करूँगा ताकि शायद बाद में मुझे पता चले।

यदि आप द्वि-कारक प्रमाणीकरण का उपयोग कर रहे हैं, तो उपयोगकर्ता नाम / पासवर्ड निर्दिष्ट करने से भी काम नहीं चलेगा - आपको पहुँच अस्वीकृत हो जाती है। लेकिन आप एक एप्लिकेशन एक्सेस टोकन का उपयोग कर सकते हैं और आपके लिए इसे कैश करने के लिए गिट के क्रेडेंशियल हेल्पर का उपयोग कर सकते हैं। यहाँ प्रासंगिक लिंक हैं:

और मुझे याद नहीं है कि मैंने यह कहां देखा था, लेकिन जब आपसे आपका उपयोगकर्ता नाम पूछा जाता है - तो आप आवेदन एक्सेस टोकन को चिपका देते हैं। फिर पासवर्ड को खाली छोड़ दें। इसने मेरे मैक पर काम किया।


2 तरह के प्रमाणीकरण का उपयोग करते समय, आप पासवर्ड के रूप में "एक्सेस टोकन" का उपयोग करते हैं। उपयोगकर्ता नाम हमेशा की तरह रहता है
बेन यित्जाकी


4

आमतौर पर आपके पास एक दूरस्थ URL होता है, कुछ इस तरह से,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

यदि आप उपयोग करते समय उपयोगकर्ता नाम और पासवर्ड छोड़ना चाहते हैं git push, तो यह प्रयास करें:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

मैंने मूल में एक ही URL (पासवर्ड सहित उपयोगकर्ता विवरण के साथ) जोड़ा है।

नोट: यह काम नहीं करता है यदि उपयोगकर्ता नाम एक ईमेल आईडी है।

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

मुझे अपना उत्तर gitcredentials (7) मैनुअल पेज से मिला । मेरे मामले के लिए, मेरे विंडोज इंस्टॉलेशन में क्रेडेंशियल-कैश नहीं है; मैं क्रेडेंशियल-स्टोर का उपयोग करता हूं।

जब मैं क्रेडेंशियल-स्टोर का उपयोग करता हूं, तो उपयोगकर्ता नाम / पासवर्ड [उपयोगकर्ता फ़ोल्डर] / git-क्रेडेंशियल फ़ाइल में संग्रहीत किया जाता है। उपयोगकर्ता नाम / पासवर्ड को हटाने के लिए, बस फ़ाइल की सामग्री को हटा दें।


2
जब आपके पास अपनी खिड़कियों में क्रेडेंशियल-कैश नहीं है, तो मैं git config --global credential.helper wincredइस स्टोर को स्थायी रूप से पासवर्ड का उपयोग करने का सुझाव दूंगा।
चेतबाहन

2

संगीतकार दस्तावेज में उल्लेख किया गया है कि आप इसे GitHub API का उपयोग करने से रोक सकते हैं, ताकि यह इस तरह कार्य करे git clone:

यदि आप एक GitHub रिपॉजिटरी पर no-apiकुंजी सेट करते हैं तो trueयह रिपॉजिटरी को क्लोन कर देगा क्योंकि यह GitHub API का उपयोग करने के बजाय किसी अन्य Git रिपॉजिटरी के साथ होगा। लेकिन gitसीधे ड्राइवर का उपयोग करने के विपरीत , संगीतकार अभी भी गिटहब की ज़िप फ़ाइलों का उपयोग करने का प्रयास करेगा।

तो अनुभाग इस तरह दिखेगा:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

ध्यान रखें कि एपीआई एक कारण के लिए है। तो यह github.com पर बढ़े हुए लोड के बारे में अंतिम उपाय का एक तरीका होना चाहिए।


यह निश्चित नहीं है कि मूल प्रश्न के साथ इस उत्तर का क्या करना है।
चार्ल्स ओपरमैन जू

2

आप bashrc फ़ाइल को भी संपादित करते हैं और उसमें एक स्क्रिप्ट जोड़ते हैं।

यह आपके पासवर्ड के लिए पूछेगा एक बार जब आप गिट शुरू करते हैं और फिर इसे याद करते हैं जब तक आप लॉग ऑफ नहीं करते।

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

यदि आप उपयोग कर रहे हैं osxkeychain और एक टोकन समाप्त हो गया है और इसे अपडेट करना चाहते हैं, तो इन चरणों का पालन करें:

टर्मिनल में चलाएं, फिर दो बार एंटर दबाएं।

git credential-osxkeychain erase
 host=github.com
 protocol=https

अब आपको उपयोगकर्ता नाम / पासवर्ड के लिए संकेत दिया जाना चाहिए। हालाँकि कभी-कभी ऐसा लगता है कि यह 'नहीं' है और आपको फिर से प्रवेश करना है।

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

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