If you like me use git for both work and play. It is nice to be able to separate Git identities.
Normally you would have something along the lines of:
# ~/.gitconfig
[user]
name = <first name> <last name>
email = <private email address>
With release 2.13 of Git you can do conditional includes, which enables you to do:
[includeIf "gitdir:~/develop/git-work/"]
path = .gitconfig-work
So insert the above snippet into: ~/.gitconfig
and create the file: ~/.gitconfig-work
, just name stuff to match your preferences.
# ~/.gitconfig-work
[user]
name = <first name> <last name>
email = <work email address>
Do note the order of things, so [user]
should be before the overwrite specified by the conditional.
# ~/.gitconfig
[user]
name = <first name> <last name>
email = <private email address>
[includeIf "gitdir:~/develop/git-work/"]
path = .gitconfig-work
After this you should be able to observe:
$ cd ~/dev/justcurious
$ git config user.email
<private email address>
$ cd ~/develop/git-work/projectA
$ git config user.email
<work email address>
You can then specify all the conditional includes you want. My conditional includes configuration ~/.gitconfig
looks like:
[includeIf "gitdir:~/develop/git-work/"]
path = .gitconfig-work
[includeIf "gitdir:~/develop/gitlab-work/"]
path = .gitconfig-work
[includeIf "gitdir:~/develop/github-work/"]
path = .gitconfig-work
You should of course set the default to your primary/dominant repositories and then overwrite for the special repositories.
NB! the last back-slash (/
) is important, leaving it out can cause issues, meaning the proper configuration is not active. Alternatively you can add asterisks (*
).
[includeIf "gitdir:~/develop/git-work/**"]
path = .gitconfig-work
[includeIf "gitdir:~/develop/gitlab-work/**"]
path = .gitconfig-work
[includeIf "gitdir:~/develop/github-work/**"]
path = .gitconfig-work
This information was retrieved from the blog post: "Juggling Multiple Git Identities" by Benny Cornelissen.
Inspecting if things work can be done using the git
command.
Check a single value:
$ git config user.username
jonasbn
And for all values (some left out for brevity and due to sensitivity):
$ git config --list
user.name=jonasbn
alias.lsch=!f() { git diff --name-status -r HEAD~$1; }; f
alias.a=add
alias.b=branch
alias.c=commit --message
alias.ca=commit --all --message
alias.cl=clone
...
I want to check where a given values originates from I can get that using: --show-origin
$ git config --show-origin user.name
file:/home/jonasbn/.gitconfig-work jonasbn
And of course you can do it for all parameters at once (some left out for brevity and due to sensitivity):
.git config --list --show-origin
file:/home/jonasbn/.gitconfig-work jonasbn
file:.git/config core.repositoryformatversion=0
- Blog post: "Maintaining Different Git Identities" by Max Kleucker, @mkleucker
- Git documentation on conditional includes
- My dotfiles repository
- Blog post: "Juggling Multiple Git Identities" by Benny Cornelissen
- Git documentation: "First-Time Git Setup"