Magit เชื่อมต่อกับ github ด้วยปุ่ม ssh สำรอง

Jan 12 2021

ฉันมีบัญชี github สองบัญชี - บัญชีส่วนบุคคลหนึ่งบัญชีสำหรับงานของฉัน ใน repos ส่วนใหญ่ของฉันฉันใช้บัญชีงานของฉันและ magit ก็ทำงานได้ดี ใน repos ส่วนตัวสองสามรายการฉันมีสิ่งนี้ใน.git/config:

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

สิ่งนี้ใช้งานได้ดีจากบรรทัดคำสั่งสำหรับสิ่งต่างๆเช่นgit pushแต่เมื่อฉันพยายามผลักดันจาก magit ฉันได้รับข้อผิดพลาดนี้:

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

เนื่องจากบัญชีการทำงานของฉันถูกกล่าวถึงในข้อผิดพลาดก็ดูเหมือนว่าการเชื่อมต่อ magit .git/configที่จะคอมไพล์ละเลยเส้นใน

มีการกำหนดค่าอื่น ๆ ที่ฉันสามารถเพิ่มลงใน magit เพื่อรับรู้สิ่งนี้ได้หรือไม่?

มีวิธีแก้ไขที่แตกต่าง / ดีกว่าในการใช้บัญชี github อื่นหรือไม่?

(แก้ไข: emacs 27.1 บน MacOS จากที่นี่ทดสอบกับ magit 2.90.1 จาก melpa-stable แล้ว 20210105.1030 จาก melpa)

คำตอบ

3 jidicula Jan 24 2021 at 09:09

มีโซลูชัน Git ที่บริสุทธิ์ที่คุณสามารถใช้ได้ในทั่วโลก.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]ใน global ของ.gitconfigฉันฉันมีการกำหนดค่าincludeIf.pathงานที่จะใช้หาก repo ตรงกับรูปแบบที่ให้ไว้เป็นอาร์กิวเมนต์กับincludeIf:

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

และไฟล์นั้นมีชื่ออีเมลที่ทำงานและรหัสคีย์ GPG ของอีเมลที่ทำงาน:

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

ทุกสิ่งในการกำหนดค่าที่สองนี้จะเขียนทับสิ่งที่กำหนดโดยค่าเริ่มต้น - จับคู่กับเงื่อนไขincludeIfเราจะได้รับการกำหนดค่าGit ที่ขึ้นอยู่กับเส้นทาง

เมื่อรวมโลก.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ตามบริบทของคุณเช่นอีเมลคีย์ชื่อผู้ใช้พฤติกรรมดึงส่งเทมเพลตข้อความ ฯลฯ

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเงื่อนไขรวมถึงที่นี่