Update (2018-03-28): if you have work and personal projects on the same machine, a better way to do this is to put all your work projects in one directory and use conditional configuration includes, introduced in Git 2.13.
I store my .gitconfig in Git, naturally. It contains this block:
[user]
email = will@willthompson.co.uk
name = Will Thompson
which is fine until I want to use a different email address for all commits on my work machine, without needing git config user.email in every working copy. In the past I’ve just made a local branch of the config, merging and cherry-picking as needed to keep in sync with the master version, but I noticed that Git reads four different config files, in this order, with later entries overriding earlier entries:
/etc/gitconfig– system-wide stuff, doesn’t help on multi-user machines$XDG_CONFIG_HOME/git/config(aka~/.config/git/config) – news to me!~/.gitconfig$GIT_DIR/config– per-repo, irrelevant here
So here’s the trick: put the standard config file at ~/.config/git/config, and then override the email address in ~/.gitconfig:
[user]
email = wjt@endlessm.com
Ta-dah! Machine-specific Git config overrides. The spanner in the works is that git config --global always updates ~/.gitconfig if it exists, but it’s a start.