Every git commit is associated with two important data: your name and email. I don't want my personal email address associated with work related git commits and vice versa. First, to set the git email address system wide, you would run following:
$git config --global user.email "email@example.com" $git config --global user.name "Your Name"
and every commits will have above info. To set the email address for individual repo, just drop the
cd into your repository and run the following:
$git config user.email "firstname.lastname@example.org" $git config user.name "Your Name"
Now every commit for this repository will have above email. There is another way, by modifying
.git/config of your repository and including a
[user] block, something like:
[core] ... [remote "origin"] ... [branch "master"] ... [user] name = Your Name email = email@example.com
Though above mentioned methods work, there are two major issues (at least for me):
- You have to run the above command everytime you create a new repository.
- You have to remember #1.
#2 is actually difficult for me.
direnv is one nifty tool which lets you have different environment variables based on directories/path. The best part is, as soon as you enter into a directory,
direnv does it's magic, so you don't have to remember that you have to run
direnv to work, you have to create a file called
.envrc where you can specify what all environment variables you want and place it the directory.
This is how I have organized my repositories:
~/ |- work # all work related repos go here |-- .envrc |-- repo-1 |-- ... |-- repo_X |- Documents/code # all my personal projects go here |-- .envrc |-- repo-1 |-- ... |-- repo_X
export GIT_AUTHOR_EMAIL="firstname.lastname@example.org" export GIT_COMMITTER_EMAIL="email@example.com"
export GIT_AUTHOR_EMAIL="firstname.lastname@example.org" export GIT_COMMITTER_EMAIL="email@example.com"
Before each prompt
direnv checks for
.envrc in current directory and parent directories. And when the file is found, it applies those and those variables will be present in your shell. You can also add
GIT_COMMITTER_NAME if you want to use different names in git commits.