工做、開源兩不誤:Git多帳號管理

因爲 Git 所具備的巨大優越性,愈來愈多的公司以及我的開始由 Svn 轉向 Git 。通常來說,每位員工都會被分配給一個公司內部的郵箱。好比一個 996 公司的員工 「張三」,得到的可能就是一個 「zhangsan@996icu.com」 的郵箱。比較規範的公司,就會要求咱們使用本身的名字和公司所分配給本身的這個郵箱來配置 Git(姓名和郵箱能夠不用引號括起來):git

git config --global user.name "張三"
git config --global user.email "zhangsan@996icu.com"

可是這種配置是全局的,若是咱們以前恰好有在 GitHub 上維護項目,那這樣勢必就會將以前所作的 Git 帳戶配置給覆蓋了。那怎麼解決呢?咱們總不能來回覆蓋,來回添加密鑰吧。咱們能不能同時配置多個 Git 帳戶呢?github

固然能。shell

這裏以 Mac 爲例,若是咱們以前配置過全局的用戶名和郵箱,那麼在用戶目錄下的.gitconfig文件中(如/Users/zhangsan/.gitconfig),會有相似以下的配置:vim

[user]
    name = 張三
    email = zhangsan@gmail.com

固然,咱們也能夠直接使用命令來查看:緩存

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

若是設置了這兩個全局屬性,就會輸出對應的值。若任何輸出的話,則表示未設置。安全

若是設置過,咱們就須要將用戶名和郵箱這兩個全局變量進行重置。使用以下命令:bash

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

咱們知道,通常 Git 服務器爲了安全,都會要求咱們添加一個安全的 SSH 密鑰。可是默認狀況下,生成的密鑰的文件名都是同樣的。於是,不一樣的用戶,必須設置不一樣文件名的密鑰文件,不然會發生覆蓋。因此,接下來千萬別以爲太熟悉不過了,就一路回車,千萬要悠着點手速。服務器

以 「張三」 爲例,首先,咱們須要根據公司郵箱來生成密鑰對:app

ssh-keygen -t rsa -C "zhangsan@996icu.com"

回車後會出現下面這句話:ssh

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

這時候可千萬別一路回車,注意看提示,這裏要咱們輸入要保存的私鑰的路徑和文件名,爲了之後易找,咱們就仍然放在該路徑下,只不過更改個跟平臺相關的文件名,輸入:

Users/zhangsan/.ssh/996icu_id_rsa

接着就能夠一路回車了,默認密碼爲空便可。

生成完密鑰以後,咱們還須要使用ssh-add命令是把專用密鑰添加到ssh-agent的高速緩存中。該命令位置在/usr/bin/ssh-add,用法以下:

ssh-add -K ~/.ssh/996icu_id_rsa

以後咱們須要將生成的密鑰對中的公鑰裏的內容用文本編輯器打開,複製下來,添加到對應的平臺上面,好比公司的 GitLab 或者 GitHub 等。

Mac 下面能夠直接使用以下命令來把公鑰複製到剪切板:

pbcopy < ~/.ssh/996icu_id_rsa.pub

一樣地,咱們使用 「zhangsan@gmail.com」 這個郵箱,來生成供 GitHub 使用的帳戶的私鑰github_id_rsa和公鑰github_id_rsa.pub,並把公鑰添加到 GitHub 平臺上。

接下來咱們還須要修改 Git 的本地配置,來將遠程的服務器地址和本地的私鑰文件進行關聯。這樣經過比較私鑰和以前填在該平臺上的公鑰,就能進行權限驗證。

Users/用戶名/.ssh/目錄下面新建一個名爲config的配置文件,添加以下內容:

# github email address
Host github
HostName github.com 
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

# gitlab email address
# 公司內網地址
HostName 192.168.6.106 
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/996icu_id_rsa

這裏就將遠程地址和本地的私鑰文件對應了起來。

配置文件中的 HostName 是遠程倉庫的訪問地址,這裏能夠是 IP,也能夠是域名。Host 是用來拉取的倉庫的別名,配不配置都行。若是 HostName 沒配置的話,那就必須把 Host 配置爲倉庫 IP 地址或者域名,而非別名。

配置了這些以後,咱們就可以成功的從遠程拉取倉庫了,拉取以後,cd到倉庫目錄下,配置該倉庫使用的用戶名和郵箱:

git config --local  user.name 張三
git config --local user.email zhangsan@996icu.com

固然,你也能夠直接不用 --local參數

注意,這裏的帳戶能夠和咱們開始時生成祕鑰的郵箱不一樣。那個郵箱其實配置的是咱們電腦針對某個 IP 的 「全局」 帳戶(注意,不是global參數指定的那個全局),這裏配置的是某個倉庫下的 「局部」 用戶,固然,你把這個倉庫再 copy 一份的話,就能夠設置個其餘的用戶名和郵箱了,畢竟是局部的嘛,至關於多個用戶在同一臺電腦上進行工做。

還有,若是你未指用戶名和郵箱的話,Git 會自動使用電腦登陸的用戶名,好比「zhangsan」,郵箱默認就是 「zhangsan@zhangsan.local」,這固然不是咱們想要的,因此最好配置下吧。

到這裏,還沒完。若是你使用的是 IDEA,好比 AS,還須要設置 SSH 使用本地(native)的客戶端,而非 AS 內嵌(build in)的 SSH 客戶端 :

在AS 3.5 Canary 10 版本上,發現沒有這個選項,應該是默認使用了本地的 SSH 客戶端。

到這裏仍然沒有完,對於 Mac,可能會遇到升級系統或者重啓系統以後,SSH私鑰失效的問題,這時候咱們能夠經過在~/.ssh/config文件中添加以下內容來解決:

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/github_id_rsa
   IdentityFile ~/.ssh/996icu_id_rsa

若是還不生效,那就能夠經過本身編寫 shell 腳本
(這裏我使用的是 zsh,因此配置的是#! /bin/zsh,若使用的是系統自帶的終端,能夠修改成#! /bin/bash):

vim .ssh/ssh_add_private_keys.sh
#! /bin/zsh
# 添加 github 公鑰
ssh-add ~/.ssh/github_id_rsa
# 添加 公司 gitlab 公鑰
ssh-add ~/.ssh/996icu_id_rsa

// 賦予sh文件可運行權限
chmod +x .ssh/ssh_add_private_keys.sh

而後把它添加到開機啓動項中:系統偏好設置>用戶與羣組>登陸項

固然,咱們也能夠建立一個Automator任務,並將其添加到系統開機啓動項中。

而後建立一個 App 應用程序:

添加 shell 腳本代碼:

而後按Command+S保存,文件名另存爲ssh_add_private_keys.app

而後把剛纔添加的這個APP添加到開機啓動項中:

固然,上面這兩種添加方式本質上都是同樣的,只不過一個是建立的.sh的 shell 腳本文件,而一個是運行 shell 腳本的 App 文件形式。

歡迎關注公衆號來獲取其餘最新消息,有趣的靈魂在等你。

相關文章
相關標籤/搜索