Conditional Git Identities

Scenario: You have two different Git identities (i.e. ssh key, name, email, etc) on the same machine, e.g. one for work and one for personal projects. The projects live in separate folders.

Possible solution: Use conditional includes in your Git config.

What does this look like? The file structure looks like:

$ tree
/home/user/
├── .gitconfig
└── projects
    ├── personal
    └── work
        └── .gitconfig

The two .gitconfig files look like:

$ cat /home/user/.gitconfig
[user]
   name = Hacker Name
   email = hacker@example.com
[core]
   editor = vim
[includeIf "gitdir:~/projects/work/"]
   path = ~/projects/work/.gitconfig
$ cat /home/user/projects/work/.gitconfig
[core]
   sshCommand = ssh -i ~/.ssh/other_key -F /dev/null
[user]
   email = work@example.com
   name = Work Name