मैथ को वैकल्पिक ssh कुंजी के साथ github से जोड़ना

Jan 12 2021

मेरे पास दो गीथूब खाते हैं - एक व्यक्तिगत और एक मेरी नौकरी के लिए। मेरे अधिकांश रिपोज में, मैं अपने कार्य खाते का उपयोग करता हूं और मैगिट ठीक काम करता है। एक जोड़े के व्यक्तिगत प्रतिनिधि में, मेरे पास यह है .git/config:

sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null

यह कमांड लाइन से चीजों के लिए अच्छी तरह से काम करता है git push, लेकिन जब मैं मैजिट से पुश करने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है:

ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.

चूँकि मेरा कार्य खाता त्रुटि संदेश में उल्लिखित है, ऐसा लगता है जैसे मैगिट का कनेक्शन git में लाइन को अनदेखा कर रहा है .git/config

क्या मुझे पहचानने के लिए कुछ और कॉन्फिग्रेशन हैं जिन्हें मैं मैगिट में जोड़ सकता हूं?

क्या अलग-अलग गीथूब खातों का उपयोग करने के लिए मैगिट में एक अलग / बेहतर समाधान है?

(संपादित करें: यहां से MacOS पर 27.1 emacs , मेग्पा-स्थिर से मैजिट 2.90.1 पर परीक्षण किया गया और फिर melpa से 20210105.1030)

जवाब

3 jidicula Jan 24 2021 at 09:09

एक शुद्ध गिट समाधान है जिसे आप अपने वैश्विक में उपयोग कर सकते हैं .gitconfig- मैं include.pathडिफ़ॉल्ट रूप से व्यक्तिगत सामान के लिए एक विन्यास का उपयोग करता हूं :

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal

और उस फ़ाइल में नाम, व्यक्तिगत ईमेल (जो SSH के लिए प्रयोग किया जाता है और मेरे GitHub खाते की पहचान करता है), और GPG कुंजी आईडी शामिल है:

# .gitconfig-personal
[user]
    name = jidicula
    email = "[email protected]"
    signingkey = "<personalKeyID>"

उसके बाद, [include]मेरे वैश्विक क्षेत्र में पहले .gitconfig, मेरे पास एक includeIf.pathकार्य-विन्यास है जिसका उपयोग करने के लिए कि रेपो एक तर्क के रूप में दिए गए पैटर्न से मेल खाता है includeIf:

# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

और उस फ़ाइल में नाम, कार्य ईमेल और कार्य ईमेल GPG कुंजी ID शामिल है:

# .gitconfig-work
[user]
        name = jidicula
        email = "[email protected]"
        signingkey = "<workKeyID>"

इस दूसरे कॉन्फ़िगरेशन में कुछ भी डिफ़ॉल्ट रूप से परिभाषित किया गया था जो अधिलेखित होगा - सशर्त के साथ जोड़ा गया includeIf, हमें पथ-निर्भर Git config मिलता है।

वैश्विक लाना .gitconfigसब एक साथ, हम पाते हैं:

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

तो फिर तुम भर देंगे .gitconfig-personalऔर gitconfig-workईमेल, कुंजी, उपयोगकर्ता नाम, पुल व्यवहार, की तरह अपने संदर्भ विशेष कॉन्फ़िगरेशन संदेश टेम्पलेट्स, आदि के लिए प्रतिबद्ध के साथ

आप यहाँ सशर्त शामिल के बारे में अधिक पढ़ सकते हैं ।