这个问题的背景比较特殊,不是每个人都会遇到

比如你和你的对象都有github账号,而且两人偶尔会用同一台电脑push东西,就会遇到这种问题

现假如我要在本机维护两套github账号,一个是donnie,一个是alpha

一. 创建密钥对

先用命令创建各自对应的密钥对,按着步骤走,密钥存储的文件名要各自命名

ssh-keygen

此时两个账号的密钥对存放到了~/.ssh/目录下了

二. 配置pubKey到GitHub账号下

在本例中,会把~/.ssh/id_rsa_alpha.pub里的公钥配到alpha的GitHub账号下;~/.ssh/id_rsa_donnie.pub里的公钥配置到donnie的GitHub账号下

三. 配置ssh config

创建~/.ssh/config文件,为每个账号配置如下内容

# donnie 
Host donnie
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_donnie

# alpha
Host alpha
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_alpha

配置完后可以使用命令ssh -T git@${Host}验证效果,例:

ssh -T git@donnie
ssh -T git@alpha

出现以下响应代表配置成功了

Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

四. 修改提交人信息

由于一台机器有两个GitHub账号使用,所以不能配置全局提交人,不然提交信息就乱套了。

首先删除全局配置:

git config --global --unset 'user.name'
git config --global --unset 'user.email'

然后再在各自的git仓库设置本地配置:

git config user.email xxx@gmail.com
git config user.name xxx

五. 将远程仓库地址与账号配置进行关联

假如原仓库地址为:
git@github.com:donnieYeh/picCrawler.git

https://github.com/donnieYeh/picCrawler.git

则重新关联的远程仓库格式为:
git@${Host}:donnieYeh/picCrawler.git

之后进行远程仓库操作,git会自动按照config文件中的配置把${Host}映射成${HostName},而且会使用对应的私钥进行通信

实践:

若已经有现成的拉下来的远程仓库,则修改远程仓库的地址:

# 查看现有的关联
$ git remote -v
origin  https://github.com/donnieYeh/picCrawler.git (fetch)
origin  https://github.com/donnieYeh/picCrawler.git (push)
# 先删除原先绑定的地址
$ git remote remove origin
# 再重新添加 
$ git remote add origin git@donnie:donnieYeh/picCrawler.git

若是新clone的仓库,自行手动把clone地址的github.com改成自己的${Host}

$ git clone git@donnie:donnieYeh/picCrawler.git

之后就能正常的进行仓库的各种管理操作啦