Git config with multiple identities
Let’s say you work with multiple repositories, some personal, some work-related and you’re doing some freelance work for a friend or two. You definitely don’t want to use the same identity and expose your juicy
email@example.com email and the linked GPG key you sign your commits with. Or if you’re bipolar.
Let’s assume your git config is similar to this (just an example, not the same name and email address, of course).
$ git config --get user.name Don Donnington $ git config --get user.email firstname.lastname@example.org
Start by removing the existing global identity:
# unset user name $ git config --global --unset user.name # unset user email $ git config --global --unset user.email # unset GPG signing key if you're using one, skip this line if it looks like voodoo magic to you $ git config --global --unset user.signingkey # require config to exist if you want to make commits $ git config --global user.useConfigOnly true
Beginning with git version 2.13, you can use conditional includes that will help you configure everything correctly.
So, you need to set up a git username and email address depending on the directory you are in. Add the lines below in your
# when you are in ~/projects the ~/.gitconfig-personal will be used [includeIf "gitdir:~/projects/"] path = ~/.gitconfig-personal # when you are in ~/projects/work the ~/.gitconfig-work will be used [includeIf "gitdir:~/projects/work/"] path = ~/.gitconfig-work # when you are in ~/projects/freelance the ~/.gitconfig-freelance will be used [includeIf "gitdir:~/projects/freelance/"] path = ~/.gitconfig-freelance
Add your personal information in the
[user] email = email@example.com name = James Hetfield signingkey = ACAB1234
Add your workplace information in the
[user] email = firstname.lastname@example.org name = Jason Newsted signingkey = FE2CCA41 [core] sshCommand = ssh -i ~/.ssh/work_ed25519
Add your freelancing (if you need a third identity, of course) information in the
[user] email = email@example.com name = Cliff Burton signingkey = E1ADB1C9
If you want to test your configuration, move into one of the folders, for example
~/projects/work/ and check your git configuration:
$ cd ~/projects/work/ $ git config --get user.name Jason Newsted $ cd ~/projects/freelance/ $ git config --get user.name Cliff Burton
created June 17, 2020