Today I Learned: .gitconfig's includeIf

Stephen Connolly's picture

Today I Learned!

(Yes, I am late to this party, but others may not even know of the party, so here goes anyway)

Problem

I want to have my commits to Git use the appropriate email address. I don’t want to have to remember to call git config user.email … every time I check out a new repository.

Background

When I checkout a repository hosted by the Apache Software Foundation, I check it out inside of ~/apache/. I want to commit to these repositories as my apache.org email address and signed with my GPG key for that address.

When I checkout a repository hosted by work, I check it out inside of ~/src/. I want to commit to these repositories as my cloudbees.com email address and signed with my GPG key for that address.

Everything else should be committed as my gmail email address and signed with my GPG key for that address.

Solution

Git has a wonderful directive called [includeIf]. Basically with this directive you can import an additional configuration file based on a condition being true.

Git SCM Logo

So my ~/.gitconfig file looks something like this

[user]
    name = Stephen Connolly
    email = __redacted_to_stop_spam_scrapers__@gmail.com
    signingkey = 19AA78492C2E0E75929F2882826B365485623138 

...

[commit]
    gpgsign = true
[gpg]
    program = gpg
[includeIf "gitdir:~/apache/"]
    path = ~/.gitconfig-apache
[includeIf "gitdir:~/src/"]
    path = ~/.gitconfig-cloudbees

And then I have ~/.gitconfig-apache which looks like

[user]
    email = __redacted_to_stop_spam_scrapers__@apache.org
    signingkey = 042B29E928995B9DB963C636C7CA19B7B620D787 

And ~/.gitconfig-cloudbees which looks like

[user]
    email = __redacted_to_stop_spam_scrapers__@cloudbees.com
    signingkey = 19ACC26DFF642A36072626405B1D58B53F3F7A0E 

And now, because of the way I structure checking out code, my commits reflect the correct identities.

Stephen ConnollyStephen Connolly has over 25 years experience in software development. He is involved in a number of open source projects, including Jenkins. Stephen was one of the first non-Sun committers to the Jenkins project and developed the weather icons. Stephen lives in Dublin, Ireland - where the weather icons are particularly useful. Follow Stephen on Twitter, GitHub and on his blog.