this post was submitted on 28 Jun 2023
1 points (66.7% liked)

Git - version control system

172 readers
5 users here now

Git - version control system

Please use English.

founded 4 years ago
MODERATORS
 

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.

no comments (yet)
sorted by: hot top controversial new old
there doesn't seem to be anything here