I was in need of using different signing keys (but same mail address) and had a little adventure in the advanced Git documentation I'd like to share.
In your `~/.config/git/config`` remove the [user] section and add this instead:
[includeIf "hasconfig:remote.*.url:https://your-remote-url/**"]
path = ~/.config/git/user_a
And in ~/.config/git/user_a
use this:
[user]
email = username@example.com
name = User Name
signingkey = the_16_digit_GPG_key_ID
Repeat as often as you need. Just add another includeIf
section for each of your remote hosts.
You can also keep a “stub” user section in your ~/.config/git/config
if you always use the same user name and mail address but want to use different keys.
[user]
email = dirk@0x7be.de
name = Dirk
In your includeIf
’d files simply set the signingkey:
[user]
signingkey = the_16_digit_GPG_key_ID
Git automatically combines the two as needed.
A minimal working example:
File ~/.config/.git/config
:
[user]
email = username@example.com
name = User Name
[commit]
gpgsign = true
[tag]
gpgsign = true
[includeIf "hasconfig:remote.*.url:https://hostname_A/**"]
path = ~/.config/git/config-A
[includeIf "hasconfig:remote.*.url:https://hostname_B/**"]
path = ~/.config/git/config-B
File ~/.config/git/config-A
:
[user]
signingkey = 16_digit_key_id_used_for_a
File ~/.config/git/config-B
:
[user]
signingkey = 16_digit_key_id_used_for_b
Now when you push commits or tags to hostname_A
or hostname_B
the correct key is used to sign those (in the example, using same name and mail address) without having to manually edit this for all your local repositories.