Magit kết nối với github bằng khóa ssh thay thế
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
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.path
cấ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.path
cấ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 .gitconfig
lạ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-personal
và gitconfig-work
vớ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 .