如何使用ssh同时连接github和gitlab

Posted on 2020-07-13 18:32  lemonforce  阅读(54)  评论(0编辑  收藏

背景

公司发的电脑被我搞坏了,备份巨慢无比,无奈之下拿到新电脑只好重新装一次环境,装完环境之后又遇到了许多问题,重温解决方案,避免下次又疯狂查文档,浪费时间。由于自己需要在 github 中开发一些自己的东西,而公司自己又搭建了一套 gitlab 代码仓库,为避免混乱,如何使用 git 可以向两个地址推送代码而不妨碍各自的开发就成为了我们需要解决的问题。

先看看 ssh 的原理,传送门:
SSH原理简介

如何部署

前提: github 和 gitlab 账号各自拥有不同的邮箱,github 账号中的邮箱用来存放自己的代码(当然根据劳动法,严格意义上利用公司的设备开发的成果归公司所有,有兴趣的可以自己 Google),gitlab 账号中的邮箱用来存放公司的日常开发代码。如果两个地址都是同一个邮箱地址,那就不用看这篇文章了。
ssh 通过 git 设置的邮箱来确认向不同的代码仓库提交代码,所以我们要在 github 和 gitlab 上同时推送代码就必须在配置的时候告诉 git,如何使用不同的邮箱来进行 ssh 连接。

这里主要分为 5 步完成。

第一步

需要确定默认主账号,推荐使用公司邮箱,因为主要还是用公司邮箱推送代码到 gitlab 仓库进行开发。

1
2
# 全局默认配置
git config --global user.name 'tuling' && git config --global user.email 'tulingCompany@company.com'

第二步

生成公钥和私钥,主 gitlab 账号直接使用常见的 ssh-keygen -t rsa -C方法, 副账号需要指定生成的文件名。
默认的ssh目录为~/.ssh下,如有不同则下面的目录需要手动改正。

1
2
3
4
5
6

# 生成默认 gitlab 主账户,公司日常开发用
ssh-keygen -t rsa -C "tulingCompany@company.com"

# 生成副账号 github 的公钥、密钥,同时指定文件名
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "tulingPeronal@personal.com"

第三步

对于如何让 github 和 gitlab 识别不同的公钥、密钥,下面需要进行最重要的一步,增加配置文件(config),用于代码仓库来判断该使用何种的公钥、密钥进行比对。

1
2
3
4
5
# 进入 ssh 配置目录
cd ~/.ssh

# 新建 config 文件并配置 config 文件
touch config

新建好 config 配置文件后,添加如下内容到 config 配置文件中(副账号为 github),

1
2
3
4

Host *github.com
IdentityFile ~/.ssh/id_rsa.github
User tulingPeronal

上传 ssh key

登陆各自的 github 和 gitlab账户
在各自的 github 和 gitlab 的账号设置中添加 ssh key
步骤为:
登陆成功 => 点击自己的头像 => setting => Add SSH Key

主账号 gitlab 中的 ssh key 粘贴 id_rsa.pub 文件中的内容

副账号 github 中的 ssh key 粘贴 id_rsa.github.pub 文件中的内容

第五步

配置成功后可以重启一下 terminal。

测试:

采用 SSH -T 测试不同账号的连接情况

1
2
# 测试连接 github
ssh -T git@github.com

 

1
2
# 测试连接 gitlab
ssh -T git@gitlab.com

如果出现相对应的账号名称,则说明测试成功。

最后

每当我们重新使用 git init 初始化项目或者 git clone 拉取远程仓库代码时,默认使用的配置为 “第一步” 使用的 git 全局配置,所以当不需要使用那个全局配置时,比如我们需要推送的目录为 github 仓库时,还需要手动设置,要不然推送到远程仓库的用户为全局配置的用户,github 仓库的 commit 提交历史头像就是灰色的。

1
2
3
4
# 进入当前拉取或初始化的 github 仓库
cd ${github-project}
# 设置本地仓库的用户名和邮箱
git config user.name "tuling" && git config user.email "tuling@personal.com"

如果已经推送到 github 仓库,但没有设置正确的 github 用户,我们还有备用方案:可以使用脚本在本地修改 author,

修改author的脚本

复制脚本到当前 github 仓库的 terminal 中,修改对应变量值, 按下 enter 执行。

推送到对应远程分支
git push orign #{branch} -f

查看远程的 commit 历史,你会发现头像已经变回来了,你的 profile 也多了一个提交历史。
同理,如果想多添加其他的代码仓库也是一样的原理。
good.