背景
公司發的電腦被我搞壞了,備份巨慢無比,無奈之下拿到新電腦只好重新裝一次環境,裝完環境之后又遇到了許多問題,重溫解決方案,避免下次又瘋狂查文檔,浪費時間。由於自己需要在 github 中開發一些自己的東西,而公司自己又搭建了一套 gitlab 代碼倉庫,為避免混亂,如何使用 git 可以向兩個地址推送代碼而不妨礙各自的開發就成為了我們需要解決的問題。
先看看 ssh 的原理,傳送門:
SSH原理簡介
如何部署
前提: github 和 gitlab 賬號各自擁有不同的郵箱,github 賬號中的郵箱用來存放自己的代碼(當然根據勞動法,嚴格意義上利用公司的設備開發的成果歸公司所有,有興趣的可以自己 Google),gitlab 賬號中的郵箱用來存放公司的日常開發代碼。如果兩個地址都是同一個郵箱地址,那就不用看這篇文章了。
ssh 通過 git 設置的郵箱來確認向不同的代碼倉庫提交代碼,所以我們要在 github 和 gitlab 上同時推送代碼就必須在配置的時候告訴 git,如何使用不同的郵箱來進行 ssh 連接。
這里主要分為 5 步完成。
第一步
需要確定默認主賬號,推薦使用公司郵箱,因為主要還是用公司郵箱推送代碼到 gitlab 倉庫進行開發。
1 |
# 全局默認配置 |
第二步
生成公鑰和私鑰,主 gitlab 賬號直接使用常見的 ssh-keygen -t rsa -C
方法, 副賬號需要指定生成的文件名。
默認的ssh目錄為~/.ssh
下,如有不同則下面的目錄需要手動改正。
1 |
|
第三步
對於如何讓 github 和 gitlab 識別不同的公鑰、密鑰,下面需要進行最重要的一步,增加配置文件(config),用於代碼倉庫來判斷該使用何種的公鑰、密鑰進行比對。
1 |
# 進入 ssh 配置目錄 |
新建好 config 配置文件后,添加如下內容到 config 配置文件中(副賬號為 github),
1 |
|
上傳 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 |
# 測試連接 github |
1 |
# 測試連接 gitlab |
如果出現相對應的賬號名稱,則說明測試成功。
最后
每當我們重新使用 git init
初始化項目或者 git clone
拉取遠程倉庫代碼時,默認使用的配置為 “第一步” 使用的 git 全局配置,所以當不需要使用那個全局配置時,比如我們需要推送的目錄為 github 倉庫時,還需要手動設置,要不然推送到遠程倉庫的用戶為全局配置的用戶,github 倉庫的 commit 提交歷史頭像就是灰色的。
1 |
# 進入當前拉取或初始化的 github 倉庫 |
如果已經推送到 github 倉庫,但沒有設置正確的 github 用戶,我們還有備用方案:可以使用腳本在本地修改 author,
復制腳本到當前 github 倉庫的 terminal 中,修改對應變量值, 按下 enter 執行。
推送到對應遠程分支git push orign #{branch} -f
查看遠程的 commit 歷史,你會發現頭像已經變回來了,你的 profile 也多了一個提交歷史。
同理,如果想多添加其他的代碼倉庫也是一樣的原理。
good.