Maintaining Different Git Identities

I like to have separate “identities” for my private and work stuff when using Git: Commits at work should be authored with my work email and commits in private projects with my private account. Until now I would always configure this per repository as soon as I noticed a commit done by the wrong email.

As I was setting up my new computer and edited the global .gitconfig, I wondered if there is a better way to keep this separate. Turns out there is one: With the release of version 2.13, Git introduced “Conditional Includes”.

With these includes I can set a specific gitconfig-file to be include for all repositories within a specific location. As I store all my work projects within the folder ~/Work, I set the default user-config to be my private one and include the work-specific configfile for all Git repositories within that location.

~/.gitconfig
[user]
name = Firstname Lastname
email = <private email address>
[includeIf "gitdir:~/Work/"]
path = .gitconfig-work
~/.gitconfig-work
[user]
name = Lastname, Firstname
email = <work email address>

The risk of being annoyed by wrongly associated commits is vastly smaller now — until I start checking out work projects to ~/Desktop/tmp for minor fixes.

To check your configuration, make sure to be in a directory which is tracked by Git. Non-Git directories will always show the default configuration:

$ cd ~/dev/justcurious
$ git config user.email
<private email address>
$ cd ~/Work/projectA
$ git config user.email
<work email address>
$ cd ~/Work/not-a-repo
$ git config user.email
<private email address>