分享

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

 LibraryPKU 2019-11-29

我自己的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
  1. # default
  2. Host github.com
  3. HostName github.com
  4. User git
  5. IdentityFile ~/.ssh/id_rsa
  6. # two
  7. Host ieit.github.com
  8. HostName github.com
  9. User git
  10. IdentityFile ~/.ssh/id_rsa_2
新建config的图跟上面3.的图一样。之后我把上面的代码拷过来,修改了Host和HostName(我把Host和HostName都写一样的)。具体他们的含义如下 :
  1. #Host myhost(这里是自定义的host简称,以后连接远程服务器就可以用命令ssh myhost)[注意下面有缩进]
  2. #User 登录用户名(如:git)
  3. #HostName 主机名可用ip也可以是域名(如:github.com或者bitbucket.org)
  4. #Port 服务器open-ssh端口(默认:22,默认时一般不写此行
  5. #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 链接
  1. ssh -T git@ieit.github.com
  2. ssh -T git@github.com
  3. # Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access.
  4. # 出现上边这句,表示链接成功
  1. 将项目 clone 到本地, folder-name 是本地文件夹路径
git clone git@github.com:whatever folder-name
  1. 取消全局 用户名/邮箱设置,并进入项目文件夹单独设置
  1. # 取消全局 用户名/邮箱 配置
  2. git config –globalunset user.name
  3. git config –globalunset user.email
  4. # 单独设置每个repo 用户名/邮箱
  5. git config user.email “xxxx@xx.com”
  6. 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)
  1. git remote rm origin
  2. git remote add origin git@ieit.github.com:whatever

  1. 成功,可以 push 测试一下
git push origin master

参考资料


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多