Today I Learned!
(Yes, I am late to this party, but others may not even know of the party, so here goes anyway)
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.
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.
Git has a wonderful directive called [includeIf]. Basically with this directive you can import an additional configuration file based on a condition being true.
So my ~/.gitconfig file looks something like this
[user] name = Stephen Connolly email = firstname.lastname@example.org 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 = email@example.com signingkey = 042B29E928995B9DB963C636C7CA19B7B620D787
And ~/.gitconfig-cloudbees which looks like
[user] email = firstname.lastname@example.org signingkey = 19ACC26DFF642A36072626405B1D58B53F3F7A0E
And now, because of the way I structure checking out code, my commits reflect the correct identities.
Stephen 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.