Magit kết nối với github bằng khóa ssh thay thế

Jan 12 2021

Tôi có hai tài khoản github - một tài khoản cá nhân và một tài khoản dành cho công việc của tôi. Trong hầu hết các repo của tôi, tôi sử dụng tài khoản công việc của mình và tài khoản hoạt động tốt. Trong một vài repo cá nhân, tôi có điều này trong .git/config:

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

Điều này hoạt động tốt từ dòng lệnh cho những thứ như git push, nhưng khi tôi cố gắng đẩy từ magit, tôi gặp lỗi này:

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

Vì tài khoản công việc của tôi được đề cập trong thông báo lỗi, có vẻ như kết nối của magit với git đang bỏ qua dòng trong .git/config.

Có một số cấu hình khác mà tôi có thể thêm vào magit để nhận ra điều này không?

Có giải pháp khác / tốt hơn trong việc sử dụng các tài khoản github khác nhau không?

(Chỉnh sửa: emacs 27.1 trên MacOS từ đây , thử nghiệm trên magit 2.90.1 từ melpa-ổn định và sau đó là 20210105.1030 từ melpa)

Trả lời

3 jidicula Jan 24 2021 at 09:09

Có một giải pháp Git thuần túy mà bạn có thể sử dụng trong toàn cầu của mình .gitconfig- tôi sử dụng một include.pathcấu hình cho nội dung cá nhân theo mặc định:

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

và tệp đó chứa tên, email cá nhân (được sử dụng cho SSH và xác định tài khoản GitHub của tôi) và ID khóa GPG:

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

Sau đó, bên dưới cái đầu tiên [include]trong toàn cục của tôi .gitconfig, tôi có một includeIf.pathcấu hình công việc để sử dụng nếu repo khớp với một mẫu được cung cấp làm đối số cho includeIf:

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

và tệp đó chứa tên, email công việc và ID khóa GPG email công việc:

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

Bất kỳ thứ gì trong cấu hình thứ hai này sẽ ghi đè lên bất kỳ thứ gì đã được xác định theo mặc định - được ghép nối với điều kiện includeIf, chúng tôi nhận được cấu hình Git phụ thuộc vào đường dẫn.

Kết hợp toàn cầu .gitconfiglại với nhau, chúng tôi nhận được:

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

Sau đó, bạn sẽ điền .gitconfig-personalgitconfig-workvới các cấu hình theo ngữ cảnh cụ thể như email, khóa, tên người dùng, hành vi kéo, mẫu thông báo cam kết, v.v.

Bạn có thể đọc thêm về bao gồm có điều kiện tại đây .