.gitconfig
is usually stored in the user.home
directory.
I use a different identity to work on projects for Company A and something else for Company B (primarily the name / email). How can I have two different Git configurations so that my check-ins don't go with the name / email?
With conditional includes in Git 2.13, it is now possible to have multiple user/email coexist on one machine with little work.
The global git config is simply a text file, so it can be edited with whatever text editor you choose. Open, edit global git config, save and close, and the changes will take effect the next time you issue a git command. It's that easy.
System vs Global vs Local Git config System Git config controls settings for all users and all repositories on your computer. Global Git config controls settings for the currently logged in user and all his repositories. Local Git config controls settings for a specific repository.
Git stores all global configurations in . gitconfig file, which is located in your home directory. To set these configuration values as global, add the --global option, and if you omit --global option, then your configurations are specific for the current Git repository. You can also set up system wide configuration.
There are 3 levels of git config; project, global and system.
Create a project specific config, you have to execute this under the project's directory:
$ git config user.name "John Doe"
Create a global config:
$ git config --global user.name "John Doe"
Create a system config:
$ git config --system user.name "John Doe"
And as you may guess, project overrides global and global overrides system.
Note: Project configs are local to just one particular copy/clone of this particular repo, and need to be reapplied if the repo is recloned clean from the remote. It changes a local file that is not sent to the remote with a commit/push.
As of git version 2.13, git supports conditional configuration includes. In this example we clone Company A's repos in ~/company_a
directory, and Company B's repos in ~/company_b
.
In your .gitconfig
you can put something like this.
[includeIf "gitdir:~/company_a/"] path = .gitconfig-company_a [includeIf "gitdir:~/company_b/"] path = .gitconfig-company_b
Example contents of .gitconfig-company_a (the core section can be omitted if the global ssh key can be used)
[user] name = John Smith email = [email protected] [core] sshCommand = ssh -i ~/.ssh/id_rsa_companya
Example contents of .gitconfig-company_b
[user] name = John Smith email = [email protected] [core] sshCommand = ssh -i ~/.ssh/id_rsa_companyb
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With