前言
有人說這樣能讓讀者心情愉悅地看文章??~
文章背景
因為自己想試著玩一下git的fork與pull request功能忆家。所以注冊了兩個github賬號來做實驗拆融。結(jié)果發(fā)現(xiàn)之前一直在用的A賬號push是正常的哼凯。新注冊的B賬號push報錯霜运。
Pushing to https://github.com/DistributionCoderXLL/XLLTest.git
remote: Permission to DistributionCoderXLL/XLLTest.git denied to b593771943.
fatal: unable to access 'https://github.com/DistributionCoderXLL/XLLTest.git/': The requested URL returned error: 403
根據(jù)上面的報錯挑童,發(fā)現(xiàn)B賬號DistributiionCoderXLL推送失敗的原因是受限于A賬號b593771943序六。
解決思想
使用多個SSH Key分別作為本地git倉庫與GitHub遠(yuǎn)程倉庫的紐帶,這也是新賬號不能正常push的原因所在
1. 根據(jù)每個賬號郵箱對應(yīng)生成SSH Keys
# 1. 打開ssh存放位置
cd ~/.ssh
# 2.對應(yīng)每個github賬號郵箱生成SSH Key
ssh-keygen -t rsa -C "A郵箱地址"
ssh-keygen -t rsa -C "B郵箱地址"
在這個命令下第一個會話的時候悠就,對生成的SSH Key進(jìn)行命名千绪。如id_rsa_github_one、id_rsa_github_two
進(jìn)入~/.ssh
路徑下梗脾,可以看到如下幾個文件:
2. 將兩個私鑰加入到SSH的agent中
# 1.刪除原有agent中的所有私鑰
ssh-add -D
# 2.對應(yīng)將剛剛生成的私鑰添加到agent中
ssh-add id_rsa_github_one
ssh-add id_rsa_github_two
# 3.查看添加到agent的私鑰列表
ssh-add -l
3.創(chuàng)建映射文件config荸型,來分別映射本地git倉庫與GitHub遠(yuǎn)程倉庫
#1.創(chuàng)建config文件
touch config
# 2.打開編輯config文件
vim config
# 3.編輯內(nèi)容如下
# one(1593771943@qq.com) //第一個git賬號
Host github.com //自定義host
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github_one //對應(yīng)的ssh私鑰
User git
# two(m15822049431@163.com) //第二個git賬號
Host small.github.com //自定義host
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github_two //對應(yīng)的ssh私鑰
User git
4.遠(yuǎn)程倉庫部署SSH Key
# 1.獲取公鑰內(nèi)容
vim id_rsa_github_one.pub
打開后將文件內(nèi)容全部復(fù)制到剪切板。
分別在網(wǎng)頁上登錄GitHub賬號炸茧,Settings -> SSH and GPG keys -> New SSH key瑞妇,將剛剛復(fù)制到剪切板公鑰內(nèi)容對應(yīng)添加進(jìn)去。
點擊Add SSH key按鈕梭冠,進(jìn)行添加辕狰。成功后如下圖:
5.測試SSH的連通性
ssh -T git@example.com example.com替換為config文件下對應(yīng)的host名。
如果連通性沒問題控漠,會返回Hi xxx(你的github賬號名)! You've ...蔓倍。并且返回到網(wǎng)頁上,看到剛才的鑰匙變綠了盐捷。
6.重新配置每個賬號下項目的遠(yuǎn)程地址
可以回頭重新看一下剛剛config文件對host的配置偶翅。
- A賬號設(shè)置的Host為github.com,這個是github默認(rèn)的碉渡,不用管聚谁。
- B賬號設(shè)置的Host為small.github.com。但是我們克隆下來的時候滞诺,遠(yuǎn)程倉庫使用的是默認(rèn)的github.com形导。所以我們需要手動更新一下這個賬號下克隆的遠(yuǎn)程倉庫地址。
# 1.cd到B賬號下的本地代碼倉庫
cd /Users/xiaole/XLLIMClient
# 2.查看此倉庫的遠(yuǎn)程倉庫地址
git remote -v
查看的遠(yuǎn)程倉庫結(jié)果如下:
origin git@github.com:DistributionCoderXLL/XLLIMClient.git (fetch)
origin git@github.com:DistributionCoderXLL/XLLIMClient.git (push)
我們看到B賬號下的遠(yuǎn)程倉庫還是git@github.com
铭段。并不是我們設(shè)置的git@small.github.com
骤宣。所以我們要替換成自己定制的。
# 3.移除原遠(yuǎn)程倉庫
git remote rm origin
# 4.添加自定制遠(yuǎn)程倉庫
git remote add origin git@small.github.com:DistributionCoderXLL/XLLIMClient.git
大功告成
做完這一切序愚,A,B兩個賬號就可以無沖突地進(jìn)行代碼的commit等限,push爸吮,merge等操作了芬膝。
如果想對這方面有所了解的話,建議大家動手操作一下形娇。你動手做或多或少都會遇到問題锰霜。不得不對國內(nèi)開發(fā)者進(jìn)行一下吐槽。很多人自己都不動手操作桐早,看著不錯就對一些文章進(jìn)行了轉(zhuǎn)載癣缅,導(dǎo)致百度一大堆錯誤的文章,這是很不負(fù)責(zé)任的行為哄酝。