Magit menghubungkan ke github dengan kunci ssh alternatif
Saya memiliki dua akun github - satu pribadi dan satu untuk pekerjaan saya. Di sebagian besar repo saya, saya menggunakan akun kerja saya dan magit berfungsi dengan baik. Dalam beberapa repo pribadi, saya memiliki ini di .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Ini berfungsi dengan baik dari baris perintah untuk hal-hal seperti git push
, tetapi ketika saya mencoba mendorong dari magit, saya mendapatkan kesalahan ini:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Karena akun kerja saya disebutkan dalam pesan kesalahan, sepertinya koneksi magit ke git mengabaikan baris masuk .git/config
.
Apakah ada konfigurasi lain yang dapat saya tambahkan ke magit untuk mengenali ini?
Apakah ada solusi berbeda / lebih baik di magit untuk menggunakan akun github yang berbeda?
(Sunting: emacs 27.1 di MacOS dari sini , diuji di magit 2.90.1 dari melpa-stable dan kemudian 20210105.1030 dari melpa)
Jawaban
Ada solusi Git murni yang dapat Anda gunakan di global Anda .gitconfig
- Saya menggunakan include.path
konfigurasi untuk barang pribadi secara default:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
dan file itu berisi nama, email pribadi (yang digunakan untuk SSH dan mengidentifikasi akun GitHub saya), dan ID kunci GPG:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Kemudian, di bawah yang pertama [include]
di global saya .gitconfig
, saya memiliki includeIf.path
konfigurasi kerja untuk digunakan jika repo cocok dengan pola yang diberikan sebagai argumen untuk includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
dan file tersebut berisi nama, email kantor, dan email kantor ID kunci GPG:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Apa pun di konfigurasi kedua ini akan menimpa apa pun yang didefinisikan secara default - dipasangkan dengan kondisional includeIf
, kita mendapatkan konfigurasi Git yang bergantung pada jalur.
Menggabungkan dunia global .gitconfig
, kita mendapatkan:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Kemudian Anda akan mengisi .gitconfig-personal
dan gitconfig-work
dengan konfigurasi khusus konteks Anda seperti email, kunci, nama pengguna, perilaku penarikan, templat pesan komit, dll.
Anda dapat membaca lebih lanjut tentang penyertaan bersyarat di sini .