場景:比如個人person和公司work的多個github賬號,這個時候在本地做操作,是無法用work賬號操作person賬號下的git倉庫的。
當我用work提交屬於person的程式碼的時候,會出現以下報錯,提示無許可權。
$ git push origin master
ERROR: Permission to person/git-start.git denied to work.
fatal: Could not read from remote repository.
使用git remote -v
可檢視當前倉庫的遠端git地址
$ git remote -v
origin git@github.com:person/git-start.git (fetch)
origin git@github.com:person/git-start.git (push)
那麼,一臺電腦上如何管理多個github賬戶呢?
設定SSH金鑰
建立多個SSH金鑰,並儲存在對應的檔案中
cd ~/.ssh
ssh-keygen -t rsa -C “work@163.com”
ssh-keygen -t rsa -C “person@163.com”
…
以上建立出id_rsa_work, id_rsa_work.pub和id_rsa_person, id_rsa_person.pub四份檔案
將SSH金鑰新增到Github賬戶
將金鑰複製到剪下板
pbcopy < ~/.ssh/id_rsa_work.pub
將生成的金鑰中的公鑰內容(即.pub檔案)的內容新增到不同的github賬戶中,流程如下:
- 轉到github的帳戶設定
- 點選“SSH金鑰”,然後“新增SSH金鑰”
- 將金鑰貼上到“金鑰”欄位並新增相關標題
- 點選“新增金鑰”,然後輸入您的Github密碼進行確認
建立config配置檔案來單獨管理金鑰
$ cd ~/.ssh/
$ sudo vim config
編輯config檔案
# work
Host work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
# person
Host person
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_person
新增新的金鑰
$ ssh-add id_rsa_work
$ ssh-add id_rsa_person
檢視當前的金鑰列表,檢視是否新增成功
$ ssh-add -l
測試以確保Github識別金鑰:
$ ssh -T work
Hi work! You`ve successfully authenticated, but GitHub does not provide shell access.
$ ssh -T person
Hi person! You`ve successfully authenticated, but GitHub does not provide shell access.
試一下
在和遠端庫互動的時候,還有一點要注意,即git倉庫地址的更改。
首先,回到命令列上,建立一個測試目錄:
$ cd ~/documents
$ mkdir git-start
$ cd git-start
使用work賬號,向Github新增一個空白的“readme.md”檔案和PUSH:
$ touch readme.md
$ git init
$ git add .
$ git commit -am "first commit"
$ git remote add origin git@work:work/git-start.git
$ git push origin master
注意我們如何使用自定義帳戶git@work
,而不是git@github.com
!
對於git@work:work/git-start.git。第一個work是在config檔案裡建立的Host,第二個work為你github的使用者名稱。
再試一下person的PUSH和PULL操作,看是否成功
tips,更改遠端倉庫的命令
$ git remote set-url origin git@work:work/git-start.git
總結,一臺計算機上管理多個github賬戶的核心就是
- ssh金鑰
- config檔案配置
- git倉庫遠端地址的配置