我自己的git账号属于GitHub, 公司使用的是GitLab,公司配备了电脑。电脑已经配置了公司的GitLab账号了。虽然家里也有电脑,但是平时工作的一些总结什么的,想发到自己的GitHub上,总不能等到回家的时候再写上吧~~~所以,我就想在公司电脑的基础上,配置自己的GitHub。
我的配置主要参考了一篇文章《一台电脑绑定两个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 config –global –unset user.name
-
git config –global –unset user.email
-
# 单独设置每个repo 用户名/邮箱
-
git config user.email “xxxx@xx.com”
-
git config user.name “xxxx”
PS:(1)git config命令要到工程目录下(反正就是git目录)执行,否则是出错的,下面就是不在git目录下执行的结果:后来我恍然大悟,然后切换到工程目录下执行就OK了。
(2)“单独设置每个repo 用户名/邮箱”这个步骤,我就是跑到工程下,执行git config user.email “xxxx@xx.com”和git config user.name “xxxx”命令。看来以后每次我GitHub/GitLab clone一个新的工程下来,都要在clone完成后,在这个工程目录下执行这两条语句来配置。【解决办法】:工作电脑平时使用公司的gitlab比较多,可以把公司的账户设置为全局,然后在单独的需要用别的账号的工程下配置对应的账号。这样就不用频繁地做这个配置。(这个全局设置与单独工程下设置地顺序不做要求
- 命令行进入项目目录,重建 origin (whatever 为相应项目地址)(这个步骤我没做。我直接就是clone了代码,改一下,看能不能push)
-
git remote rm origin
-
git remote add origin git@ieit.github.com:whatever
-
- 成功,可以 push 测试一下
git push origin master