Git 2.13 introduced conditional configuration includes. For now, the only supported condition is matching the filesystem path of the repository, but that’s exactly what we need in this case.
You can configure your conditional includes by adding them to the bottom of your home directory’s ~/.gitconfig file:
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/specific-project/"]
path = ~/.gitconfig-specific-project
Now you can put whatever options you want into those files:
$ cat ~/.gitconfig-work
[user]
name = Serious Q. Programmer
email = [email protected]
$ cat ~/.gitconfig-specific-project
[user]
name = John Q. Hacker
email = [email protected]
The appropriate config options will be applied automatically whenever you’re in a repository that’s inside your specified include directories. In any directories other than the specified include directories, Git will use your global config settings.
Your home directory's ~/.gitconfig file should now look something like this:
Mac/Linux:
[color]
ui = true
[user]
name = Your Name
email = [email protected]
[includeIf "gitdir:~/work/"]
path = .gitconfig-work
[includeIf "gitdir:~/specific-project/"]
path = ~/.gitconfig-specific-project
Windows:
[color]
ui = true
[core]
autocrlf = true
[user]
name = Your Name
email = [email protected]
[includeIf "gitdir:C:/Users/<username>/work/"]
path = C:/Users/<username>/.gitconfig-work
[includeIf "gitdir:C:/Users/<username>/specific-project/"]
path = C:/Users/<username>/.gitconfig-specific-project
Windows Subsystem for Linux (if files are in Windows file system):
[color]
ui = true
[core]
autocrlf = input
[user]
name = Your Name
email = [email protected]
[includeIf "gitdir:/c/users/<username>/work/"]
path = ~/.gitconfig-work
[includeIf "gitdir:/c/users/<username>/specific-project/"]
path = ~/.gitconfig-specific-project
Navigate into a repo inside your "work" directory and run this command to check that it's working:
git config user.email