create different ssh key according the article Mac Set-Up Git
$ ssh-keygen -t rsa -C "[email protected]"
Please refer to github ssh issues for common problems.
for example, 2 keys created at:
~/.ssh/id_rsa_activehacker
~/.ssh/id_rsa_jexchan
then, add these two keys as following
$ ssh-add ~/.ssh/id_rsa_activehacker
$ ssh-add ~/.ssh/id_rsa_jexchan
you can delete all cached keys before
$ ssh-add -D
finally, you can check your saved keys
$ ssh-add -l
$ cd ~/.ssh/
$ touch config
$ subl -a config
Then added
#activehacker account
Host github.com-activehacker
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_activehacker
#jexchan account
Host github.com-jexchan
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_jexchan
clone your repo git clone [email protected]:activehacker/gfs.git gfs_jexchan
cd gfs_jexchan and modify git config
$ git config user.name "jexchan"
$ git config user.email "[email protected]"
$ git config user.name "activehacker"
$ git config user.email "[email protected]"
or you can have global git config $ git config --global user.name "jexchan" $ git config --global user.email "[email protected]"
then use normal flow to push your code
$ git add .
$ git commit -m "your comments"
$ git push
Another related article in Chinese
munging your
.git/config
remote is just going to end up being a hassle in the long run.trust me, been there done that, never doing it again tomorrow.
the. most. portable. way is to setup your root gitconfig so that it uses the
includeif
.The
includeif
stanza/directive modifies your git config on the fly based on the CWD of the git operation.Relevant to this thread, this is where we can teach git about the
ssh_command
, which is where you point to your shiny unique ssh key.The end result is a set of dotfiles
~/.gitconfig
,~/.dotfiles/this.gitconfig
,~/.dotfiles/that.gitconfig
you can carry around and a directory structure for your~/Projects
~/.gitconfig
Personal Configs
~/.dotfiles/mine-gitlab.gitconfig
~/.dotfiles/mine-github.gitconfig
For the above, any git operations occurring within a path that matches either:
Projects/Mine/Gitlab/
Projects/Mine/GitHub/
, orProjects/Experiements/Github/
will use my github config.
Work Configs
~/.dotfiles/work-github-somecompany.gitconfig
For the above, any git operation occuring in a directory that matches
Projects/Work/Github/SomeCompany
will specifically use a different ssh key despite my~/.ssh/config
declaring another for other general github ssh connections. The-o IdentitiesOnly
tells ssh to use only the private key specified with the "-i" option and ignore any other keys in the SSH agent or on the remote server.The main reasons I love this setup :