Magit menghubungkan ke github dengan kunci ssh alternatif

Jan 12 2021

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

3 jidicula Jan 24 2021 at 09:09

Ada solusi Git murni yang dapat Anda gunakan di global Anda .gitconfig- Saya menggunakan include.pathkonfigurasi 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.pathkonfigurasi 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-personaldan gitconfig-workdengan 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 .