一台电脑绑定两个git帐号(GitHub和GitLab)

我自己的git账号属于GitHub, 公司使用的是GitLab,公司配备了电脑。电脑已经配置了公司的GitLab账号了。虽然家里也有电脑,但是平时工作的一些总结什么的,想发到自己的GitHub上,总不能等到回家的时候再写上吧~~~所以,我就想在公司电脑的基础上,配置自己的GitHub

我的配置主要参考了一篇文章《一台电脑绑定两个github帐号教程》。配置步骤差不多, 就是对有些地方容易搞错。本文主要是在这篇文章地基础上做记录(绿色文字为我的记录)。


思路

ssh 方式链接到 Github/GitLab,需要唯一的公钥,如果想同一台电脑绑定两个Github/GitLab 帐号,需要两个条件:

  1. 能够生成两对 私钥/公钥
  2. push 时,可以区分两个账户,推送到相应的仓库

解决方案:

  1. 生成 私钥/公钥 时,密钥文件命名避免重复
  2. 设置不同 Host 对应同一 HostName 但密钥不同
  3. 取消 git 全局用户名/邮箱设置,为每个仓库独立设置 用户名/邮箱

操作方法

  1. 查看已有 密钥
  • Mac 下输入命令 ls ~/.ssh/,看到 id_rsaid_rsa_pub 则说明已经有一对密钥。如下图
  1. 生成新的公钥,并命名为 id_rsa_2 (保证与之前密钥文件名称不同即可,文件名最好有意义,否则写后面的配置的时候写错文件名,我的文件名是id_rsa_ljy
  • ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "yourmail@xxx.com"
  • 如下图

上面命令执行完,~/.ssh下就出现了"_ljy"结尾的文件

  1. .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多帐号配置》,我的配置如下:


  1. 将生成的 id_rsa.pubid_rsa_2.pub内容copy 到对应的 repo(这里因为公司的配置很早就配置了。我是添加我的GitHub,所以我只做了一步:id_rsa_2.pub内容copy 到我的GitHub账号配置那里,我没有copy在repo的SSH key。因为我想让我的这个电脑能访问到GitHub账号的所有工程)
  1. 测试 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.
# 出现上边这句,表示链接成功
  1. 将项目 clone 到本地, folder-name 是本地文件夹路径
git clone git@github.com:whatever folder-name
  1. 取消全局 用户名/邮箱设置,并进入项目文件夹单独设置
# 取消全局 用户名/邮箱 配置
git config –globalunset user.name
git config –globalunset 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比较多,可以把公司的账户设置为全局,然后在单独的需要用别的账号的工程下配置对应的账号。这样就不用频繁地做这个配置。(这个全局设置与单独工程下设置地顺序不做要求
  1. 命令行进入项目目录,重建 origin (whatever 为相应项目地址)(这个步骤我没做。我直接就是clone了代码,改一下,看能不能push)
git remote rm origin
git remote add origin git@ieit.github.com:whatever
  1. 成功,可以 push 测试一下
git push origin master

参考资料


展开阅读全文

没有更多推荐了,返回首页