/!\ Be very carrefull in your setup : any misconfiguration make all the git config to fail silently ! Go trought this guide step by step and it should be fine 😉
-
Generate your SSH keys as per your git provider documentation.
-
Add each public SSH keys to your git providers acounts.
-
In your
~/.ssh/config
, set each ssh key for each repository as in this exemple:Host github.com HostName github.com User git IdentityFile ~/.ssh/github_private_key IdentitiesOnly=yes Host gitlab.com Hostname gitlab.com User git IdentityFile ~/.ssh/gitlab_private_key IdentitiesOnly=yes
/!\ Require git 2.13+ for conditional include support.
The idea here is to use a different git user name & email depending on the folder you are in.
-
In your
~/.gitconfig
, remove the[user]
block and add the following (adapt this exemple to your needs) :[includeIf "gitdir:~/code/personal/"] path = .gitconfig-personal [includeIf "gitdir:~/code/professional/"] path = .gitconfig-professional
-
In your
~/.gitconfig-personal
, add your personnal user informations:[user] email = [email protected] # note we use the noreply github mail name = personal_username
-
In your
~/.gitconfig-professional
, add your professional user informations:[user] email = [email protected] name = professional_username
If you need to add a GPG key and bind it to a user to sign your commits, you can do so like this:
You should have GPG installed and configured like the GPG suite
-
Add the GPG key ID to your
~/.gitconfig-<PROFILE>
config and enable commit signing:[user] email = [email protected] name = Your NAME signingkey = SIGNING_KEY_ID [commit] gpgsign = true
-
Make sure to register the right GPG binary in your
~/.gitconfig
:[program] pgp = /path/to/your/gpg2/bin
-
Now each repository will use the custom user info setup depending on the top-level folder.
-
Check your settings are taken into account, for instance in
~/code/personal/
:$ cd ~/code/personal/ $ git config --get user.email # should return [email protected] as per the exemple $ git config --get user.name # should return personal_username as per the exemple $ git config --get user.signingkey # should return the GPG key ID as configured for the user
-
Do the same for each folder you have setup.
-
You can also display and check the global git config:
git config --list --global
- Or just the local config for the repository folder you are in:
git config --list
- Or just the local config for the repository folder you are in:
-
Done !
- use
git config
commands instead of config file manual editions (editing config directly is kind of dangerous but is more understandable, maybe keep it like this ?)
Hello, sorry to be a little late to the party but after running into a similar issue and finding this solution, it inspired a more dynamic way to include the custom config files. When having multiple projects at the same time, the "IncludeIf..." can became too verbose and may also lead to confusion if some of those configs contain similar settings (or names). In order to alleviate this, we still placed the custom ".gitconfig" file inside each project, but in the global ".gitconfig" (in windows should be under C:\Users$user) and add an alias there like this:
[alias] set-config = !git config --global include.path $(git rev-parse --show-toplevel)/.gitconfig
We named it "set-config" but of course you can change that to your liking. after that, just do:
This will automatically set the path to the current project being used, meaning that it can be used without limitations or having to manually add multiple "if" statements.
Thanks to @bgauduch for this post and hope this helps!