這篇文章給大家分享的是有關(guān)git多賬號(hào)登錄問(wèn)題的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有潮南免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。同一服務(wù)器,同一托管平臺(tái),多個(gè)賬號(hào)問(wèn)題
1、添加key
我們暫且以oschina為例。為了更好的說(shuō)明問(wèn)題,我們?cè)趏schina平臺(tái)分別用賬號(hào)111新建項(xiàng)目test111和賬號(hào)222新建項(xiàng)目test222,記得項(xiàng)目私有化哦,不然我們也沒(méi)啥說(shuō)的了。
在我們想要把項(xiàng)目test111 clone下來(lái)之前,需要先按照下面的步驟設(shè)置關(guān)聯(lián)的key
ssh-keygen -t rsa -C "111@163.com" // 郵箱是賬號(hào)111對(duì)應(yīng)的郵箱
整個(gè)過(guò)程就回車(chē)完事,操作起來(lái)那是相當(dāng)?shù)暮?jiǎn)單!但是還沒(méi)完,可能你注意到了,回車(chē)的過(guò)程中,有一句話(huà)是這樣提示的:
Your public key has been saved in /root/.ssh/id_rsa.pub.
沒(méi)錯(cuò),我們現(xiàn)在打開(kāi)這個(gè)文件
cat /root/.ssh/id_rsa.pub
拷貝文件里面的內(nèi)容, 然后打開(kāi) http://git.oschina.net/keys 這個(gè)頁(yè)面,新建key,把復(fù)制的內(nèi)容粘貼進(jìn)來(lái)就好了。
這樣一來(lái),我們就把服務(wù)器上面的key跟oschina平臺(tái)進(jìn)行了關(guān)聯(lián)。
2、clone項(xiàng)目
接著我們通過(guò)git clone命令把test111項(xiàng)目clone下來(lái),記得clone的地址是ssh而不是https哦,這個(gè)時(shí)候會(huì)提示我們輸入用戶(hù)名和密碼,其分別是oschina的賬號(hào)和密碼。
如果你手賤是以https的方式進(jìn)行clone的,可以通過(guò)下面的命令重新設(shè)置遠(yuǎn)程倉(cāng)庫(kù)地址(沒(méi)有則可跳過(guò)此步驟)
// 移除之前的遠(yuǎn)程倉(cāng)庫(kù)地址 git remote remove origin // 新增遠(yuǎn)程倉(cāng)庫(kù)地址為ssh,非https git remote add origin git@git.oschina.net:wwolf/test111.git
3、多賬號(hào)兼容問(wèn)題
到這里,對(duì)于test111項(xiàng)目pull push操作基本上都是沒(méi)有問(wèn)題的了。如果說(shuō)用戶(hù)222想在這臺(tái)服務(wù)器上面對(duì)項(xiàng)目test222進(jìn)行管理,我們直接執(zhí)行g(shù)it clone git@git.oschina.net:222/test222.git之后,報(bào)錯(cuò)了,提示如下:
Access denied. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
為什么呢?首先最重要的問(wèn)題肯定是key的問(wèn)題了!因?yàn)槲覀冎安⑽磳釉谶@臺(tái)服務(wù)器增加key關(guān)聯(lián)到用戶(hù)222的oschina賬號(hào)!那我們就按照步驟1重新在服務(wù)器上為用戶(hù)222添加一個(gè)key吧,不過(guò)需要注意的是,我們的key保存的文件要重命名了,不然可就把用戶(hù)111創(chuàng)建的key覆蓋了!
ssh-keygen -t rsa -C "賬號(hào)222的郵箱@qq.com" //接下來(lái)會(huì)提示我們想要把key保存在哪個(gè)文件,重新輸入文件名即可 Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_2 //接著回車(chē)回車(chē)回車(chē)完事,重要的話(huà)說(shuō)三遍!
然后我們登錄賬號(hào)222的oschina賬號(hào)添加key
但是問(wèn)題出現(xiàn)了,這個(gè)時(shí)候我們重新clone test222依舊提示我們沒(méi)權(quán)限,怎么回事???本篇文章的中心主題曝光了!廢話(huà)了一堆,開(kāi)始說(shuō)重點(diǎn)--------------------------
其實(shí)這個(gè)時(shí)候我們clone test222項(xiàng)目時(shí),git是拿默認(rèn)的id_rsa.pub文件里面的key去對(duì)比的,這肯定是有問(wèn)題的嘛,因?yàn)?22賬號(hào)并沒(méi)有添加這個(gè)key!那也就是說(shuō)我們這里如果clone test222的時(shí)候讓git拿著id_rsa_2.pub文件里面的key去驗(yàn)證不就完事了么?是的,就是這樣!我們看實(shí)現(xiàn)步驟:
首先我們讓git識(shí)別我們新增的key
ssh-agent bash ssh-add ~/.ssh/id_rsa_2
接著我們?cè)趡/.ssh/ 目錄下新建或者修改config文件
#Host 是你遠(yuǎn)程倉(cāng)庫(kù)的地址,注意哦,如果有些服務(wù)器做的ip端口轉(zhuǎn)發(fā),這里不要帶上端口號(hào) Host git.oschina.net #HostName 是遠(yuǎn)程倉(cāng)庫(kù)的地址,同樣如果做的端口轉(zhuǎn)發(fā)也不應(yīng)帶端口號(hào) HostName git.oschina.net #Port 端口號(hào),如果有做轉(zhuǎn)發(fā)需要在這里填寫(xiě)端口號(hào),沒(méi)有就不必要填 #Port 8800 #用戶(hù) User 111 #識(shí)別key的文件 IdentityFile ~/.ssh/id_rsa #都指向同一個(gè)平臺(tái)的話(huà),下面的Host需要做個(gè)處理,因?yàn)槲覀冊(cè)谟眠@個(gè)key的時(shí)候根據(jù)Host從上到下進(jìn)行查找,不做修改肯定會(huì)先查找到第一個(gè)key,依舊無(wú)效,隨便改就好了,其他參數(shù)不做特殊處理 Host git222.oschina.net HostName git.oschina.net #Port 8800 User 222 IdentityFile ~/.ssh/id_rsa_2
可以看到,我們對(duì)222用戶(hù)的Host做了處理,那么我們就需要修改下222的遠(yuǎn)程倉(cāng)庫(kù)地址了
// 原倉(cāng)庫(kù)地址 git@git.oschina.net:222/test222.git // 修改為 git@git222.oschina.net:222/test222.git
也就是說(shuō)這個(gè)時(shí)候用戶(hù)222只需要執(zhí)行命令
git clone git@git222.oschina.net:222/test222.git
就可以了!就可以了?。?!
cd test222/
//發(fā)現(xiàn)git pull git push也都沒(méi)有任何問(wèn)題
同一服務(wù)器,不同托管平臺(tái),多個(gè)賬號(hào)問(wèn)題
這多個(gè)平臺(tái)的問(wèn)題基本上就簡(jiǎn)單了,為了舉例說(shuō)明,我們用gitlab平臺(tái)的333賬號(hào)的項(xiàng)目test333進(jìn)行測(cè)試,注意哦,我們是注冊(cè)第三個(gè)賬號(hào)在上面兩個(gè)賬號(hào)的基礎(chǔ)之上進(jìn)行的測(cè)試
git clone git@gitlab.com:333/test333.git
// 可想而知,同樣是沒(méi)權(quán)
因?yàn)闆](méi)那么多郵箱,我們注冊(cè)gitlab依舊使用的是用戶(hù)222的郵箱,不過(guò)這對(duì)我們的操作沒(méi)任何影響,無(wú)非就是多創(chuàng)建一個(gè)id_rsa_3文件而已,鑒于此,我們直接拷貝id_rsa_2.pub里面的key到gitlab平臺(tái)。
然后在~/.ssh/config文件內(nèi)添加gitlab平臺(tái)的配置即可
Host gitlab.com HostName gitlab.com #Port 8800 User 333 //因?yàn)間itlab的郵箱跟用戶(hù)222一致,這里用這個(gè)key,如果不一致,你仍然需要生成新的key,這里引用新的key文件 IdentityFile ~/.ssh/id_rsa_2
PS:Git多個(gè)賬戶(hù)沖突問(wèn)題解決
由于自己有兩個(gè)github賬號(hào),最近在push項(xiàng)目時(shí),突然發(fā)現(xiàn)一直提示的permission denied. 細(xì)看原來(lái)是用的另外一個(gè)github的賬號(hào),不是當(dāng)前origin所在的github對(duì)應(yīng)的賬號(hào)。于是查找了一stackoverflow上面的解決方http://stackoverflow.com/questions/14689788/multiple-github-accounts-what-values-for-host-in-ssh-config。
清除git的全局設(shè)置
git config --global user.name "your_name" git config --global user.email "your_email"
然后重新設(shè)置每個(gè)項(xiàng)目的非全局的用戶(hù)名和郵箱:
git config user.name "your_name" git config user.email "your_email"
SSH配置
在~/.ssh目錄下面,使用ssh-keygen -C “your_email” -t rsa 生成公私秘鑰,當(dāng)有多個(gè)github賬號(hào)的時(shí)候,可以生成多組rsa的公司密鑰。然后配置~/.ssh/config文件(如果沒(méi)有的話(huà)請(qǐng)重新創(chuàng)建一個(gè)):
#第一個(gè)github項(xiàng)目賬號(hào) Host first_project HostName github.com User first_user IdentityFile ~/.ssh/id_rsa_first #第二個(gè)git項(xiàng)目賬號(hào) Host second_project HostName github.com User second_user IdentityFile ~/.ssh/id_rsa_second
從first項(xiàng)目拉取代碼:
git pull first master
感謝各位的閱讀!關(guān)于“git多賬號(hào)登錄問(wèn)題的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!