In my ~/.gitconfig
, I list my personal email address under [user]
, since that\'s what I want to use for Github repos.
But, I\'ve recently s
There is a simple solution that seems to work well for avoiding mistakes.
Simply remove the [user]
section from your ~/.gitconfig
, which will prevent you from making any commits without setting user.name
for each repository.
In your ~/.bashrc
, add some simple aliases for the user and email:
alias ggmail='git config user.name "My Name";git config user.email me@gmail.com'
alias gwork='git config user.name "My Name";git config user.email me@work.job'
Another option to get git
to work with multiple names / emails is by aliasing git
and using the -c
flag to override the global and repository-specific config.
For example, by defining an alias:
alias git='/usr/bin/git -c user.name="Your name" -c user.email="name@example.com"'
To see whether it works, simply type git config user.email
:
$ git config user.email
name@example.com
Instead of an alias, you could also put a custom git
executable within your $PATH
.
#!/bin/sh
/usr/bin/git -c user.name="Your name" -c user.email="name@example.com" "$@"
An advantage of these method over a repository-specific .git/config
is that it applies to every git
repository when the custom git
program is active. In this way, you can easily switch between users/names without modifying any (shared) configuration.
GIT_AUTHOR_EMAIL
+ local .bashrc
.bashrc_local
: don't track this file, put it only on your work computer:
export GIT_AUTHOR_EMAIL='me@work.com'
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
.bashrc
: track this file, make it the same on both work and home computers:
F="$HOME/.bashrc_local"
if [ -r "$F" ]; then
. "$F"
fi
I'm using https://github.com/technicalpickles/homesick to sync my dotfiles.
If only gitconfig would accept environment variables: Shell variable expansion in git config
Just add this to your ~/.bash_profile to switch between default keys for github.com
# Git SSH keys swap
alias work_git="ssh-add -D && ssh-add -K ~/.ssh/id_rsa_work"
alias personal_git="ssh-add -D && ssh-add -K ~/.ssh/id_rsa"
With conditional includes in Git 2.13, it is now possible to have multiple user/email coexist on one machine with little work.
user.gitconfig
has my personal name and email. work-user.gitconfig
has my work name and email. Both files are at ~
path.
So my personal name/email applies by default. For c:/work/
dir, my work name/email is applied. For c:/work/github/
dir, my personal name/email is applied. This works as the last setting gets applied.
# ~/.gitconfig
[include]
path = user.gitconfig
[includeIf "gitdir/i:c:/work/"]
path = work-user.gitconfig
[includeIf "gitdir/i:c:/work/github/"]
path = user.gitconfig
gitdir
is case-sensitive and gitdir/i
is case-insensitive.
"gitdir/i:github/"
would apply the conditional include for any directory with github
in its path.
Windows Environment
Additional this can be modified from Git Extensions --> Settings --> Global Settings
, if you have it installed in your systems.
gitextensions-latest-release
Right Click on a folder/directory in Windows Environment to access these settings.
Update : How to switch/maintain multiple settings in Version 2.49