需求:需要在公司电脑的基础上,配置自己的GitHub。
思路:ssh 方式链接到 Github/GitLab,需要唯一的公钥,如果想同一台电脑绑定两个Github/GitLab 帐号,需要两个条件:
能够生成两对 私钥/公钥push 时,可以区分两个账户,推送到相应的仓库
方案:
生成 私钥/公钥 时,密钥文件命名避免重复
设置不同 Host 对应同一 HostName 但密钥不同
取消 git 全局用户名/邮箱设置,为每个仓库独立设置 用户名/邮箱
操作方法
查看已有 密钥
Mac 下输入命令 ls ~/.ssh/,看到 id_rsa 与 id_rsa_pub 则说明已经有一对密钥。
成新的公钥,并命名为 id_rsa_2 (保证与之前密钥文件名称不同即可,文件名最好有意义,否则写后面的配置的时候写错文件名,我的文件名是id_rsa_ljy)
ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com"
如下图
上面命令执行完,~/.ssh下就出现了"_ljy"结尾的文件
在 .ssh 文件夹下新建 config 文件并编辑,令不同 Host 实际映射到同一HostName,但密钥文件不同。Host 前缀可自定义,例子中ieit
# default
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# two
Host ieit.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2
新建config的图跟上面3.的图一样。之后我把上面的代码拷过来,修改了Host和HostName(我把Host和HostName都写一样的)。具体他们的含义如下 :
#Host myhost(这里是自定义的host简称,以后连接远程服务器就可以用命令ssh myhost)[注意下面有缩进]
#User 登录用户名(如:git)
#HostName 主机名可用ip也可以是域名(如:github.com或者bitbucket.org)
#Port 服务器open-ssh端口(默认:22,默认时一般不写此行
#IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
引自《Git多帐号配置》,我的配置如下:
将生成的 id_rsa.pub,id_rsa_2.pub内容copy 到对应的 repo(这里因为公司的配置很早就配置了。我是添加我的GitHub,所以我只做了一步:id_rsa_2.pub内容copy 到我的GitHub账号配置那里,我没有copy在repo的SSH key。因为我想让我的这个电脑能访问到GitHub账号的所有工程)
参考教程: 使用SSH密钥连接Github【图文教程】
测试 ssh 链接
ssh -T git@ieit.github.com
ssh -T git@github.com
# Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access.
出现上边这句,表示链接成功
将项目 clone 到本地, folder-name 是本地文件夹路径
git clone git@github.com:whatever folder-name
清除git的全局设置
如果你之前在设置本地仓库和github连接的时候设置过user.name和user.email,那么你必须首先清楚掉该设置,因为不清楚掉该设置,两个账号在提交资料的时候,验证肯定冲突(只能设置一个全局的user.name和user.email,而你现在有两个账号就对应两个不同的)。
git config --global user.name "your_name"
git config --global user.email "your_email"
就是重新设置覆盖了而已。。。
如果没有设置,可以直接跳转第二部。如果你忘了,最好还是覆盖一下。
至此,设置成功。
参考博客:
https://www.jianshu.com/p/89cb26e5c3e8
https://blog.csdn.net/chinacsdnv2/article/details/53733756