同臺電腦使用個人和公司兩個Git沖突解決

說明

本文轉(zhuǎn)載:

原GitHub地址:https://github.com/xirong/my-git

====================

由于公司團隊使用 GitLab 來托管代碼,同時,個人在 Github 上還有一些代碼倉庫,可公司郵箱與個人郵箱是不同的大猛,由此產(chǎn)生的 SSH key 也是不同的,這就造成了沖突 荆忍,文章提供此類問題的解決方案:**如何在一臺機器上面同時使用 Github 與 Gitlab 的服務(wù)既穆?**

# 問題產(chǎn)生場景


## 無密碼與遠程服務(wù)器交互的秘密 - SSH

如果采用`ssh 協(xié)議`或者`git 協(xié)議`通過終端命令對遠程倉庫進行`push`操作的時候隐解,大概的過程如下:(前提在 Github 上已經(jīng)配置的本機的 SSH Public Key)

1. 客戶端發(fā)起一個 Public Key 的認證請求抖拦,并發(fā)送RSA Key的模數(shù)作為標識符把介。(關(guān)于 RSA Key 詳細 [維基百科](https://en.wikipedia.org/wiki/RSA_(algorithm)))

2. 服務(wù)端檢查是否存在請求帳號的公鑰(Linux中存儲在~/.ssh/authorized_keys文件中),以及其擁有的訪問權(quán)限蟋座。

3. 服務(wù)端使用對應(yīng)的公鑰對一個隨機的256位的字符串進行加密,并發(fā)送給客戶端脚牍。

4. 客戶端使用私鑰對字符串進行解密向臀,并將其結(jié)合session id生成一個MD5值發(fā)送給服務(wù)端。 結(jié)合session id的目的是為了避免攻擊者采用重放攻擊(replay attack)诸狭。

5. 服務(wù)端采用同樣的方式生成MD5值與客戶端返回的MD5值進行比較券膀,完成對客戶端的認證。

6. 將push的內(nèi)容進行加密與服務(wù)端傳輸數(shù)據(jù)驯遇。

關(guān)于 SSH芹彬,請查看 [SSH原理簡介](http://erik-2-blog.logdown.com/posts/74081-ssh-principle) ,更通俗易懂的文章請查看[阮一峰-SSH原理與運用(一):遠程登錄](http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html) 叉庐。

## 具體場景

無論使用哪種代碼托管服務(wù)商舒帮,對于 Git 而言,`郵箱` 是識別用戶的唯一手段陡叠,所以對于不同的服務(wù)商玩郊,由于郵箱不同,那么通過郵件名創(chuàng)建的 SSH Key 自然是不同的枉阵,這時候在不同的服務(wù)商之間進行 `push` 命令的時候译红,Git 是不知道使用哪個 SSH Key ,自然導致 `push` 的失敗兴溜。場景如下:

1. 在公司團隊使用搭建的 Gitlab 服務(wù)侦厚,提交郵箱`xirong.liu@corp.xx.com`, 個人 Github 服務(wù)拙徽,提交郵箱 `ixirong.liu@gmail.com` (Bitbucket 同理)刨沦。

2. 有兩個Github賬戶,不同的賬戶提交不同的倉庫內(nèi)容斋攀。

# 解決方案

## 方案一:同一個郵箱

由于`郵箱`是識別的唯一手段已卷,那么自然的,這兩者采用同一個郵箱,生成的 public key 也會是同一個侧蘸,上傳到 Github 或者 Gitlab 上面裁眯,在 Git 的配置中 ,設(shè)置好 Global 的配置 :` git config --global user.name 'xirong.liu' && git config --global user.email 'xirong.liu@corp.xx.com'` 進行日常的開發(fā)是沒有問題的讳癌。

實際生活中采用同一個郵箱的可能性并不是太大穿稳,這就引出了方案二

方案二:基于config文件


所謂的方案二,原理上就是對 SSH 協(xié)議配置 config 文件晌坤,對不同的域名采用不同的認證密鑰逢艘。

git config 介紹

Git有一個工具被稱為git config,它允許你獲得和設(shè)置配置變量骤菠;這些變量可以控制Git的外觀和操作的各個方面它改。這些變量可以被存儲在三個不同的位置:

1. /etc/gitconfig 文件:包含了適用于系統(tǒng)所有用戶和所有庫的值。如果你傳遞參數(shù)選項’`--system`’ 給 git config商乎,它將明確的讀和寫這個文件央拖。

2. ~/.gitconfig 文件 :具體到你的用戶。你可以通過傳遞 ‘`--global`’ 選項使Git 讀或?qū)戇@個特定的文件鹉戚。

3. 位于 Git 目錄的 config 文件 (也就是 .git/config) :無論你當前在用的庫是什么鲜戒,特定指向該單一的庫。每個級別重寫前一個級別的值抹凳。因此遏餐,在 .git/config 中的值覆蓋了在/etc/gitconfig中的同一個值,可以通過傳遞‘`--local`’選項使Git 讀或?qū)戇@個特定的文件赢底。

由于采用了不同的郵箱失都,對不同的服務(wù)商進行提交,所以此時我們經(jīng)常配置的 `git config --global` 就不能常用了颖系,必須在每個倉庫的目錄下進行配置自己的用戶名俊戳、郵箱休溶。(嫌麻煩?xirong 是這么解決的,由于個人的 Github 上有較多的倉庫纤怒,而自己團隊的代碼基本上都是穩(wěn)定的蘸拔,有數(shù)的幾個巨缘,所以在 `git config --global user.email 'ixirong.liu@gmail.com'` 中全局配置的是個人郵箱欣鳖,在團隊的項目中配置)

1.? 配置 Git 用戶名、郵箱

如剛才所說不傅,xirong 的配置如下:

# 全局配置旅掂,Github倉庫中默認使用此配置

git config --global user.name 'xirong' && git config --global user.email 'ixirong.liu@gmail.com'

# 團隊項目配置,每次新創(chuàng)建一個項目访娶,需要執(zhí)行下

git config --local user.name 'xirong.liu' && git config --local user.email 'xirong.liu@corp.xxx.com'

### 2. 生成 ssh key 上傳到 Github/Gitlab

ssh key 默認生成后保存在 `~/.ssh/`目錄下 商虐,默認為 `id_rsa 和 id_rsa.pub` 兩個文件,由于我們需要分開配置,所以這么做:

# 生成公鑰秘车、密鑰的同時指定文件名典勇,Gitlab使用

ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "xirong.liu@corp.xxx.com"

# 生成默認,Github使用

ssh-keygen -t rsa -C "ixirong.liu@gmail.com"


命令執(zhí)行完成后叮趴,這時`~/.ssh`目錄下會多出`id_rsa.gitlab`和`id_rsa.gitlab.pub`兩個文件割笙,`id_rsa.gitlab.pub` 里保存的就是我們要使用的key,這個key就是用來上傳到 Gitlab上的眯亦。

### 3. 配置 config 文件

在 `~/.ssh`目錄下伤溉,如果不存在,則新建 `touch ~/.ssh/config`文件 妻率,文件內(nèi)容添加如下:

Host *.corp.xxx.com

IdentityFile ~/.ssh/id_rsa.gitlab

User xirong.liu

配置完成后乱顾,符合 `*.corp.xxx.com`后綴的 Git 倉庫,均采取` ~/.ssh/id_rsa.gitlab` 密鑰進行驗證宫静,其它的采取默認的糯耍。

4. 上傳public key 到 Github/Gitlab

以Github為例,過程如下:

1. 登錄github

2. 點擊右上方的Accounting settings圖標

3. 選擇 SSH key

4. 點擊 Add SSH key

在出現(xiàn)的界面中填寫SSH key的名稱囊嘉,填一個你自己喜歡的名稱即可,然后將上面拷貝的`~/.ssh/id_rsa.pub`文件內(nèi)容粘帖到`key`一欄革为,在點擊“`add key`”按鈕就可以了扭粱。

添加過程github會提示你輸入一次你的github密碼 ,確認后即添加完畢震檩。 上傳Gitlab的過程一樣琢蛤,請自己操作。

?5. 驗證是否OK

由于每個托管商的倉庫都有唯一的后綴抛虏,比如 Github的是 `git@github.com:*`博其,所以可以這樣測試:


?? ~? ssh -T git@github.com

Hi xirong! You've successfully authenticated, but GitHub does not provide shell access.

?? ~? ssh -T git@gitlab.dev

Welcome to GitLab, xirong.liu!

看到這些 `Welcome` 信息,說明就是 OK的了迂猴。

以后慕淡,如果還有任何的需求,都可以這么解決沸毁,看下 xirong 的幾個托管倉庫:

?? ~? ll ~/.ssh

total 40

-rw-r--r-- 1 xirong staff? 264 Jul 10 14:42 config

-rw------- 1 xirong staff 3243 Jul 10 14:09 id_rsa

-rw------- 1 xirong staff 1675 Jan 28 20:39 id_rsa.gitlab

-rw-r--r-- 1 xirong staff? 407 Jan 28 20:39 id_rsa.gitlab.pub

-rw-r--r-- 1 xirong staff? 747 Jul 10 14:09 id_rsa.pub

-rw------- 1 xirong staff 1679 Jun 22 11:42 id_rsa_gitcafe

-rw-r--r-- 1 xirong staff? 407 Jun 22 11:42 id_rsa_gitcafe.pub

-rw-r--r-- 1 xirong staff 9139 Jul 29 15:08 known_hosts

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峰髓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子息尺,更是在濱河造成了極大的恐慌携兵,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂誉,死亡現(xiàn)場離奇詭異徐紧,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門并级,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拂檩,“玉大人,你說我怎么就攤上這事死遭」慊郑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵呀潭,是天一觀的道長钉迷。 經(jīng)常有香客問我,道長钠署,這世上最難降的妖魔是什么糠聪? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮谐鼎,結(jié)果婚禮上舰蟆,老公的妹妹穿的比我還像新娘。我一直安慰自己狸棍,他們只是感情好身害,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著草戈,像睡著了一般塌鸯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唐片,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天丙猬,我揣著相機與錄音,去河邊找鬼费韭。 笑死茧球,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的星持。 我是一名探鬼主播抢埋,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼督暂!你這毒婦竟也來了羹令?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤损痰,失蹤者是張志新(化名)和其女友劉穎福侈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卢未,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡肪凛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年堰汉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伟墙。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡翘鸭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戳葵,到底是詐尸還是另有隱情就乓,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布拱烁,位于F島的核電站生蚁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戏自。R本人自食惡果不足惜邦投,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擅笔。 院中可真熱鬧志衣,春花似錦、人聲如沸猛们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弯淘。三九已至和二,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耳胎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工惕它, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕午,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓淹魄,卻偏偏與公主長得像郁惜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甲锡,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344