Aurélien Gâteau

Includes in your git config

written on Saturday, December 5, 2015

So, let's assume you work on several machines. You have set up a system to centralize all your dot files so that you have a familiar environment everywhere you log in.

There are many ways to do this, I personally created a Git repository for my dot files. This repository contains a script which creates symbolic links at the right place, and another script which periodically commits any changes, pulls then pushes.

So far so good. Now, what if you want your Git configuration to be subtly different from machine to machine? In my case I wanted to have a different value for user.email when I am on a work account and when I am on a personal account.

Git supports includes, so you can modify your ~/.gitconfig like this:

[include]
path = ~/.gitconfig.local

Then you can create a ~/.gitconfig.local with account-specific configuration, for example:

[user]
name = Aurélien Gâteau
email = [email protected]

Simple enough, but I actually lost a lot of time because I was testing the configuration like this:

$ git config --global user.email

The --global option tells Git to ignore the repository configuration and only look at the ~/.gitconfig. Turns out that when you specify a configuration file, using --global or -f <somefile>, then git config does not expand includes! Reading documentation a bit more, I found out that the correct command is:

$ git config --global --includes user.email
[email protected]

That's it, hope it saves you some time!

This post was tagged git and tips