1. 程式人生 > 實用技巧 >如何使用ssh同時連線github和gitlab

如何使用ssh同時連線github和gitlab

背景

公司發的電腦被我搞壞了,備份巨慢無比,無奈之下拿到新電腦只好重新裝一次環境,裝完環境之後又遇到了許多問題,重溫解決方案,避免下次又瘋狂查文件,浪費時間。由於自己需要在 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 '[email protected]'

第二步

生成公鑰和私鑰,主 gitlab 賬號直接使用常見的ssh-keygen -t rsa -C方法, 副賬號需要指定生成的檔名。
預設的ssh目錄為~/.ssh下,如有不同則下面的目錄需要手動改正。

1
2
3
4
5
6

# 生成預設 gitlab 主賬戶,公司日常開發用
ssh-keygen -t rsa -C "[email protected]"

# 生成副賬號 github 的公鑰、金鑰,同時指定檔名
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "[email protected]"

第三步

對於如何讓 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 [email protected]

1
2
# 測試連線 gitlab
ssh -T [email protected]

如果出現相對應的賬號名稱,則說明測試成功。

最後

每當我們重新使用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 "[email protected]"

如果已經推送到 github 倉庫,但沒有設定正確的 github 使用者,我們還有備用方案:可以使用指令碼在本地修改 author,

修改author的指令碼

複製指令碼到當前 github 倉庫的 terminal 中,修改對應變數值, 按下 enter 執行。

推送到對應遠端分支
git push orign #{branch} -f

檢視遠端的 commit 歷史,你會發現頭像已經變回來了,你的 profile 也多了一個提交歷史。
同理,如果想多新增其他的程式碼倉庫也是一樣的原理。
good.