Mac下配置多個Git帳戶

應用場景

咱們常常將代碼託管到github、gitlab這樣的網站上。爲了不每次push代碼時都要輸入用戶名和密碼,一般會選擇使用ssh協議,將公鑰保存到託管網站上。在實際開發中,每每要將代碼託管到多個不一樣的網站上。好比,公司的代碼須要託管到coding上,本身的開源代碼託管到GitHub上,私有代碼託管到gitlab上等等,每一個託管網站都對應一個git帳戶。默認狀況下,一臺電腦的Git只對應一個帳戶,只能往一個網站push代碼,很是不便。這篇博客將介紹如何在一個Git終端中配置多個帳戶,同時管理多個託管網站的代碼。git

準備工做

首先,須要準備好對Git的全局用戶進行配置。在初次安裝Git時,每每會使用以下的命令配置全局用戶名和郵箱:github

git config --global user.name "xxx" // 配置全局用戶名,如Github上註冊的用戶名
git config --global user.email "yyy@mail.com" // 配置全局郵箱,如Github上配置的郵箱

這個--global選項,是指這裏配置的user.nameuser.email是相對於全局進行配置的,即不一樣的Git倉庫默認的用戶名和郵箱都是這個值。因爲須要管理多個帳戶,因此僅僅使用這個全局值是不夠的,須要在每一個倉庫中單獨配置。對此,有兩種處理方法:shell

若是以前已經使用該命令進行配置,則先使用以下命令清除vim

git config --global --unset user.name
git config --global --unset user.email

若是不肯定是否已經配置過,可使用下面的命令查看ssh

git config --global user.name
git config --global user.email

配置步驟

1. 對每一個帳戶生成一對密鑰

首先進入保存祕鑰的目錄:gitlab

cd ~/.ssh // 進入目錄,該目錄下保存生成的祕鑰

而後,根據帳戶郵箱生成祕鑰。例如我在GitHub上的郵箱是liugui@hust.edu.cn,則命令爲:測試

ssh-keygen -t rsa -C "liugui@hust.edu.cn"

輸入完成後,會有以下提示:fetch

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/liugui/.ssh/id_rsa):

這裏要求對祕鑰進行命名,默認的文件名是id_rsa。爲了方便區分,我這裏命名爲id_rsa_github。接下來的提示都直接進行回車,直到祕鑰生成。經過ls命令,能夠看到剛剛生成的密鑰對id_rsa_githubid_rsa_github.pub。其中id_rsa_github.pub是公鑰。網站

一樣,對於GitLab上的帳戶,我是用另外一個郵箱註冊的,按照一樣的步驟生成id_rsa_gitlab的祕鑰對。接下來的步驟,除額外說明外,兩個帳戶的操做徹底相同。ui

2. 私鑰添加到本地

SSH協議的原理,就是在託管網站上使用公鑰,在本地使用私鑰,這樣本地倉庫就能夠和遠程倉庫進行通訊。在上一步已經生成了祕鑰文件,接下來須要使用祕鑰文件,首先是在本地使用祕鑰文件:

ssh-add ~/.ssh/id_rsa_github // 將GitHub私鑰添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 將GitLab私鑰添加到本地

爲了檢驗本地是否添加成功,可使用ssh-add -l命令進行查看

3. 對本地祕鑰進行配置

因爲添加了多個密鑰文件,因此須要對這多個密鑰進行管理。在.ssh目錄下新建一個config文件:

touch config

文件中的內容以下:

Host github // 網站的別名,隨意取
HostName github.com // 託管網站的域名
User liugui // 託管網站上的用戶名
IdentityFile ~/.ssh/id_rsa_github // 使用的密鑰文件

// GitLab的配置相同
Host gitlab
HostName gitlab.com
User liugui
IdentityFile ~/.ssh/id_rsa_gitlab

4. 公鑰添加到託管網站

以GitHub爲例,先在本地複製公鑰。進入.ssh目錄,使用vim id_rsa_github.pub查看生成的GitHub公鑰,全選進行復制。

登陸GitHub,點擊右上角頭像選擇settings,在打開的頁面中選擇SSH and GPG keys,

圖片描述

在打開的頁面的Key輸入框中粘貼剛剛複製的公鑰,title的名字本身隨便去,而後點擊下方的Add SSH key按鈕:
圖片描述

至此,託管網站的公鑰添加完成。總結來講,就是針對每一個託管網站分別生成一對密鑰,而後分別添加到本地和託管網站。

這時候,能夠測試一下配置是否成功,測試命令使用別名。例如,對於GitHub,原本應該使用的測試命令是:

ssh -T git@github.com

在config文件中,給GitHub網站配置的別名就是github,因此直接使用別名,就是

ssh -T git@github

如何使用

使用有兩種狀況,一種狀況是從遠端拉取代碼到本地,一種是本地已有倉庫須要與遠程倉庫關聯。

1.若是是從遠端拉取代碼

選擇SSH協議的複製命令,如對於GitLab上代碼庫test,其複製命令爲

git clone git@gitlab.com:liugui/test.git

因爲使用了別名gitlab,因此實際使用的複製命令應當爲:

git clone git@gitlab:liugui/test.git

這種方法較爲簡單,修改後的代碼無需額外配置,能夠直接push

2. 若是是本地已有的倉庫

這種狀況適用於本地新建的倉庫須要與遠端進行關聯,或者以前已經使用sourceTree等圖形界面軟件拷貝的倉庫。進入本地倉庫文件夾,須要單獨配置該倉庫的用戶名和郵箱

git config user.name "liugui"
git config user.email "liugui@hust.edu.cn"

而後,進入本地倉庫的git目錄,打開config文件

cd .git // 該目錄是隱藏的,ls命令不可見,可是能夠直接進入,若是是新建的文件夾須要先執行git init
vim config

在config文件中,修改(config文件中已有remote "origin"信息)或者添加(config文件中不包含remote "origin"信息)分支信息:

[remote "origin"]
        url = git@gitlab:GuiLiu/test.git
        fetch = +refs/heads/*:refs/remotes/origin/*

主要是URL部分,原生的信息通常是git@gitlab.com:GuiLiu/test.git,須要將gitlab.com使用別名gitlab代替。

能夠看到,倉庫中的關鍵是要配置好用戶名和郵箱,以及使用別名。使用別名的目的是爲了經過別名,將本地倉庫與密鑰目錄.ssh文件夾下的密鑰進行管理,這樣就完成了本地倉庫使用的私鑰與託管網站使用的公鑰的配對,而用戶名和郵箱是該倉庫使用SSH協議時須要用到的信息

補充一下Coding

在關聯coding上託管的代碼時,遇到了一點麻煩,主要是由於別名的修改不正確,以及20端口禁用的問題致使的,因此單獨記錄下,.ssh目錄下的config文件中的密鑰信息應該爲:

Host coding
HostName git-ssh.coding.net // 這個域名使用coding官網獲取的,不能寫coding.net
User liugui
IdentityFile ~/.ssh/id_rsa_coding
Port 443 // 20端口可能被禁用,須要使用443端口

我的博客:http://www.liugui.org

相關文章
相關標籤/搜索