同一臺Mac上配置多個ssh及git 更改提交作者

背景:

在一臺Mac電腦上有時候為了切換不同的身份我們需要用不同的身份做一些事情利耍,但一般我們登陸Mac時只會使用同一個用戶來操作Mac拨扶,來回切用戶也不是很方便糊余。比如現(xiàn)在我用公司郵箱注冊的身份管理公司的項目焊唬,然后自己的私有項目想用私有郵箱注冊的賬號管理,這種事情往往會發(fā)生在git管理的項目上豫缨。
為了完全區(qū)別的用兩種身份使用git,需要注意兩種情況:

  1. 配置不同的ssh
  2. git 提交時使用不同的作者和郵箱端朵。
  3. 修改git的提交作者和郵箱
    下面針對以上兩種情況我們詳細得講解下好芭。

配置不同的ssh

我們訪問git服務上托管的工程(下面都會以gitlab為例,其他git托管服務其實都是一樣的)冲呢,可以選擇ssh和https兩種方式訪問舍败。如下圖:

ssh1.png

那么兩種方式有什么不同的呢,用ssh會更加方便些敬拓,因為你可以通過ssh和git服務器簡歷安全的身份識別邻薯,這樣就不用每次進行git操作時輸入賬號和密碼了。
對于SSH,其實是一種加密的網(wǎng)絡傳輸協(xié)議乘凸,一般git托管服務都支持厕诡。ssh會有一對私鑰和公鑰,我們會把公鑰保存到git托管的服務器上营勤。
那么如何生成ssh呢灵嫌?一般的gitlab上都有對應的說明。這里我簡單歸納下:

  1. 打開終端冀偶,輸入命令ssh-keygen -o -t rsa -b 4096 -C "email@example.com",將命令中的email@example.com替換成你自己的郵箱,比如gongSiHuaMing@gongSiYuMing.com,然后回車渔嚷。
  2. 回車后會終端會提示你Enter file in which to save the key (/Users/MRzhao/.ssh/id_rsa):這是提示你保存的公私鑰的地址进鸠,默認是在/Users/MRzhao/.ssh/id_rsa,可以直接回車形病,然后會提示你Enter passphrase這里不要設置密碼客年,直接回車,出現(xiàn)Enter same passphrase again:,繼續(xù)回車漠吻,順利的話量瓜,終端會提示你私鑰和秘鑰保存呢成功了,我們在~/.ssh/目錄下回看到兩個文件:id_rsa(私鑰)途乃,id_rsa.pub(公鑰),
  3. 我們需要把id_rsa.pub中的所有內容拷貝出來绍傲,然后粘貼到gitlab上的ssh添加列表中(gitlab上ssh的添加列表位置:賬號頭像--->setting--->找到??圖標,點擊ssh keys)按照提示添加進去就行了耍共。
    順利的話烫饼,你就可以直接用ssh協(xié)議來訪問你的項目了,比如我們git clone時就可以直接用ssh協(xié)議地址等试读,而且不用登陸gitlab賬號杠纵、密碼。
    但是如果我們之前有已經(jīng)存在過id_rsa怎么辦呢钩骇,在Enter file in which to save the key (~/.ssh/id_rsa):這一步比藻,如果我們要覆蓋掉舊的公私鑰就直接回車铝量,然后終端會提示~/.ssh/id_rsa already exists Overwrite (y/n),y代表覆蓋银亲,n代表不會覆蓋慢叨。那么我們既要保留舊的又要創(chuàng)建一個新的怎么辦呢?回到我們問題的場景群凶,我之前的公私鑰是服務公司的git托管服務的插爹,現(xiàn)在我要創(chuàng)建一個自己的公私鑰怎么辦呢?我們在Enter file in which to save the key (~/.ssh/id_rsa):時輸入我們自己的公私鑰地址请梢,比如公司的保存在~/.ssh/id_rsa赠尾,我們可以設置自己的為~/.ssh/my_id_rsa,然后重復步驟2,順利的話毅弧,我們在~/.ssh目錄下會看到my_id_rsa和my_id_rsa.pub兩個文件气嫁,我們my_id_rsa.pub文件的內容粘貼到自己賬號的gitlab上的ssh列表中就行了搭综。
    4.但是還沒有完灾票,ssh服務器默認是去找id_rsa,現(xiàn)在需要把這個key添加到ssh-agent中术幔,這樣ssh服務器才能認識my_id_rsa,在終端執(zhí)行ssh-add -K ~/.ssh/my_id_rsa指令元咙。(這里為什么加上了一個-K參數(shù)呢梯影?因為在Mac上,當系統(tǒng)重啟后會“忘記”這個密鑰庶香,所以通過指定-K把SSH key導入到密鑰鏈中甲棍。),查看添加結果:ssh-add -l
    5.編輯配置文件~/.ssh/config

Host gongSiTuoGuanDiZhi.com
Hostname gongSiTuoGuanDiZhi.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

Host gitlab.com
HostName gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/my_id_rsa

參數(shù)說明:

  • Host分別為公司自己的gitlab托管的服務地址(一般公司都有自己的git托管服務)
  • Hostname,隨便起
  • User赶掖,隨便
  • PreferredAuthentications感猛,寫死publickey
  • IdentityFile,公鑰地址奢赂。
    注陪白,如果我們用的id_rsa添加在了過個git托管服務器,比如github,我們只要再添加github的配置就行了

Host github.com
Hostname ssh.github.com
Port 443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

  1. 測試配置膳灶。執(zhí)行下面的指令ssh -T gitlab.com (就是剛剛你給HostName),順利的話終端會提示You've successfully authenticated, but GitHub does not provide shell access.

這樣第一個問題算是解決了咱士,我們可以用公司的賬號登陸公司的git服務,用自己的賬號登陸gitlab來實現(xiàn)公司和自己私有項目的管理了轧钓。但是使用git的時候我們每次提交的作者都是同一個人司致,這樣也會造成困擾,我們理想的情況是聋迎,對公司的項目提交我們的作者和郵箱都是用公司里的名字脂矫,而對于自己的私有項目可以用昵稱和自己的郵箱。


ssh2.png

也就是說我們如何在不同的工程里配置不同的提交者信息呢霉晕?

git配置不同的作者和郵箱庭再。

git可以管理多個項目捞奕,每個git管理的項目都有一個config文件,我們可以直接在不同的項目目錄下執(zhí)行:
git config user.name "your name"
git config user.email "your name"
這樣就可以更該提交作者和郵箱了
當然git也有一個全局環(huán)境的配置:
git config --global user.name "your name"
git config --global user.email "your email"
這樣拄轻,其他工程里颅围,默認就會使用全局的配置,在~/.gitconfig里我們可以看到配置信息恨搓。

但是院促,如果之前使用默認git config --global的配置提交了自己私有工程的代碼,即使后面我們在自己私有工程里配置了git config的作者和郵箱信息斧抱,之前的提交依然是全局的默認配置常拓,那么問題來了,如何修改之前已經(jīng)提交過的作者信息呢?

修改git的提交作者和郵箱

比如現(xiàn)在我們有A-->B--->C--->D辉浦,順次的提交弄抬,A和D次提交我們用的是新的作者和郵箱,BC次用的是舊版的地址和郵箱宪郊。一個方法是通過git rebase合并掉B和C兩次的提交到A掂恕。
那么我們可以執(zhí)行git rebase -i HEAD~n指令,這里的n需要替換成3弛槐,表示當前節(jié)點(D)到B之間懊亡,輸入命令后,會顯示

pick ac0fcc6 add file2
pick a0cbfbe add file3
pick 16ee6eb add file4

# Rebase d57f11f..16ee6eb onto d57f11f (3 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell

修改第2行和第3行的pick為edit或e保存退出乎串。保存上面的修改并退出后店枣,git 會依次執(zhí)行上面的操作,當操作為 pick 時灌闺,直接 commit艰争。當操作為 edit 時坏瞄,會中斷桂对,并提示以下信息:

You can amend the commit now, with

    git commit --amend 

Once you are satisfied with your changes, run

    git rebase --continue

這里的意思是說,你可以使用 git commit --amend 來修改此次提交鸠匀,修改以后蕉斜,覺得滿意了,執(zhí)行 git rebase --continue 繼續(xù)剩下的流程缀棍。

由于我們的主要目的是修改提交者的信息宅此,因此光用 git commit --amend 是不夠的,我們要使用 git commit --amend --author "更改后的作者 genggai@email.com" 這樣的操作爬范,這一點是修改提交者信息的關鍵所在父腕。

使用上面的命令成功修改此次提交的提交者信息后,一定要記得執(zhí)行 git rebase --continue 繼續(xù)青瀑。

最終完成以后提示如下:

$ git rebase --continue
Successfully rebased and updated refs/heads/master.

這樣我們就批量改動作者了璧亮。但是這個方法永遠改動不了第一次提交的作者萧诫,你會發(fā)現(xiàn)git rebase -i HEAD~n指令的時候你永遠改動不了第一條提交的信息,而且如果我想改動所有提交歷史的作者怎么辦枝嘶?
很簡單帘饶,按照官方的幾個命令就可以完成了Changing author info
注:在執(zhí)行git push -u origin master -f,時遇到GitLab: You are not allowed to force push code to a protected branch on this project.錯誤群扶,原因是你將master分支設置成了protected分支及刻,git服務器可以修改master分支的狀態(tài)的,改成非protected狀態(tài)竞阐,進行提交然后再改回來就OK了缴饭。

參考:Changing author info
同一個Mac,配置多個SSH Key
Gitlab強制推送提示"You are not allowed to force push code to a protected branch on this project."

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末馁菜,一起剝皮案震驚了整個濱河市茴扁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汪疮,老刑警劉巖峭火,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異智嚷,居然都是意外死亡卖丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門盏道,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稍浆,“玉大人,你說我怎么就攤上這事猜嘱⌒品悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵朗伶,是天一觀的道長弦撩。 經(jīng)常有香客問我,道長论皆,這世上最難降的妖魔是什么益楼? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮点晴,結果婚禮上感凤,老公的妹妹穿的比我還像新娘。我一直安慰自己粒督,他們只是感情好陪竿,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屠橄,像睡著了一般族跛。 火紅的嫁衣襯著肌膚如雪捐康。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天庸蔼,我揣著相機與錄音解总,去河邊找鬼。 笑死姐仅,一個胖子當著我的面吹牛花枫,可吹牛的內容都是我干的。 我是一名探鬼主播掏膏,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劳翰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了馒疹?” 一聲冷哼從身側響起佳簸,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颖变,沒想到半個月后生均,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡腥刹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年马胧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衔峰。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡佩脊,死狀恐怖,靈堂內的尸體忽然破棺而出垫卤,到底是詐尸還是另有隱情威彰,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布穴肘,位于F島的核電站歇盼,受9級特大地震影響,放射性物質發(fā)生泄漏梢褐。R本人自食惡果不足惜旺遮,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一赵讯、第九天 我趴在偏房一處隱蔽的房頂上張望盈咳。 院中可真熱鬧,春花似錦边翼、人聲如沸鱼响。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丈积。三九已至筐骇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間江滨,已是汗流浹背铛纬。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唬滑,地道東北人告唆。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像晶密,于是被迫代替她去往敵國和親擒悬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內容