一臺機器使用不一樣的Git帳號

一臺機器使用不一樣的Git帳號

場景

在平常使用 git 做爲倉庫使用的時候,有時可能會遇到這樣的一些狀況:html

1. 有兩個 `github` 帳號,一臺電腦怎麼同時鏈接這兩個帳號進行維護呢?
2. 本身用一個 `github` 帳號,平時用來更新本身的一些資料;公司使用的 `gitlab`(也是 `git` 的衍生產品)

SSH Key 的配置

1.Windows 下打開 Git Bash,建立 SSH Key,按提示輸入密碼,能夠不填密碼一路回車git

$ ssh-keygen -t rsa -C "註冊郵箱"

而後用戶主目錄 /.ssh/ 下有兩個文件,id_rsa 是私鑰,id_rsa.pub 是公鑰github

2.獲取 key,打開 .ssh 下的 id_rsa.pub 文件,裏面的內容就是 key 的內容shell

$ start ~/.ssh/id_rsa.pub

3.登陸 GitHub,打開SSH Keys 頁面,快捷地址vim

img

4.測試 ssh key 是否成功,使用命令windows

$ ssh -T git@github.com

若是出現 You’ve successfully authenticated, but GitHub does not provide shell access 。這就表示已成功連上 githubbash

Gitlab 和 Github 不一樣帳號配置

通常開發用戶應該都配置過一個git的帳號,想在添加一個帳號。服務器

清除 git 的全局設置

使用 git config --list 查看當前配置app

若是你以前在設置本地倉庫和 github 鏈接的時候設置過 user.nameuser.email, 那麼你必須首先清楚掉該設置,由於不清楚掉該設置,兩個帳號在提交資料的時候,驗證確定衝突(只能設置一個全局的user.nameuser.email,而你如今有兩個帳號就對應兩個不一樣的)。ssh

1.取消global
git config --global --unset user.name
git config --global --unset user.email

2.設置每一個項目repo的本身的user.email
git config  user.email "xxxx@xx.com"
git config  user.name "suzie"

或者直接直接編輯電腦.gitconfig 文件

$ cd ~// 進入根目錄
$ vim .gitconfig // 把 `name` 和 `email` 都去掉

生成另一個帳號新的SSH keys

  1. ssh-keygen 命令生成一組新的id_rsa_newid_rsa_new.pub
$ ssh-keygen -t rsa -C "new email"

平時咱們都是直接回車,默認生成 id_rsaid_rsa.pub。這裏特別須要注意,出現提示輸入文件名的時候(Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_new)要輸入與默認配置不同的文件名,好比:我這裏填的是 id_rsa_new.

注:windows 用戶和 mac 用戶的區別就是,mac.ssh 文件夾在根目錄下,因此表示成 ~/.ssh/ ,而 windwos 用戶是 C:\Users\Administrator\.ssh

  1. 執行 ssh-agentssh 識別新的私鑰,由於默認只讀取 id_rsa,爲了讓 SSH 識別新的私鑰,需將其添加到 SSH agent 中:
$ ssh-add ~/.ssh/id_rsa_work

若是出現 Could not open a connection to your authentication agent 的錯誤,就試着用如下命令:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa_work
  1. 配置 ~/.ssh/config 文件
    前面咱們在 ~/.ssh 目錄下面,使用 ssh-keygen -C 「your_email」 -t rsa 生成公私祕鑰,當有多個github 帳號的時候,能夠生成多組 rsa 的公司密鑰。而後配置 ~/.ssh/config 文件(若是沒有的話請從新建立一個)。
$ touch config        # 建立config文件

而後修改以下:
個人 config 配置以下:

# 該文件用於配置私鑰對應的服務器
# Default github user(609514766@qq.com)
Host git@github.com
HostName github.com
User jawil
IdentityFile ~/.ssh/id_rsa_github

# gitlab user(yenian.ll@alibaba-inc.com)
# 建一個gitlab別名,新建的賬號使用這個別名作克隆和更新
Host git@gitlab.alibaba-inc.com
HostName gitlab.alibaba-inc.com
User yenian.ll
IdentityFile ~/.ssh/id_rsa

若是存在 config文件的話,其實就是往這個 config 中添加一個 Host

同一個電腦 兩個 github 帳號配置

然而事情並無到此結束,裝完逼還想跑那是不行的。小豬往後發現本身是一個念舊的人。他想要同時使用兩個 github

那好吧,What a big deal~

這個時候咱們須要先找到 ~/.ssh/config 文件,而後往裏面添加以下配置

Host jawil.github.com
        HostName github.com
        IdentityFile ~/.ssh/github_rsa

咱們指定 pig.github.com 這個"做用域"下的ssh鏈接統一指向 github.com ,而且使用以前生成好的 github_rsa 這個密鑰加密。

那麼默認的就是使用 ~/.ssh/id_rsa 這個密鑰加密咯。 而且 HostName 與「做用域」相同。這個就不須要咱們管了。

這個時候咱們測試一下唄。

$ ssh -T git@jawil.github.com
Hi jawil! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@github.com
Hi yenian!  You've successfully authenticated, but GitHub does not provide shell access.

: ) , orz , 這時候還差最後一步,就是修改一下咱們在 jawil 克隆下來的項目的 remote 「做用域」 。

$ git remote rm origin
$ git remote add origin git@jawil.github.com:jawil/demo.git 
// 注意是 `jawil.github.com` 噢?把這個理解爲一個「做用域」吧。
$ git push origin master
Everything up-to-date

上述步驟不成功解決方案

  • 笨方法:用到哪一個就設置那個的全局參數
git config --global  user.name Levi
git config --global  user.email Levi@email.com
  • 注意
# 密鑰文件的命名爲id_isa,改成其餘名字可能會有錯誤
# 參考:
I found the solution to the problem in the gitlab README (http://doc.gitlab.com/ce/ssh/README.html) . I used a different filename for my key instead of id_rsa, so the key wasn't working. When I created a config file in my .ssh directory and configured the settings appropriately, "git clone" worked without a hitch.
相關文章
相關標籤/搜索