作者:白狼 出處:http://www.manks.top/git-multiply-accounts.html 本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
什么意思呢?想問的人自然知道,不懂的人說了他也是不知道滴。
同一服務器,同一托管平台,多個賬號問題
1、添加key
我們暫且以oschina為例。為了更好的說明問題,我們在oschina平台分別用賬號111新建項目test111和賬號222新建項目test222,記得項目私有化哦,不然我們也沒啥說的了。
在我們想要把項目test111 clone下來之前,需要先按照下面的步驟設置關聯的key
ssh-keygen -t rsa -C "111@163.com" // 郵箱是賬號111對應的郵箱
整個過程就回車完事,操作起來那是相當的簡單!但是還沒完,可能你注意到了,回車的過程中,有一句話是這樣提示的:
Your public key has been saved in /root/.ssh/id_rsa.pub.
沒錯,我們現在打開這個文件
cat /root/.ssh/id_rsa.pub
拷貝文件里面的內容, 然后打開 http://git.oschina.net/keys 這個頁面,新建key,把復制的內容粘貼進來就好了。
這樣一來,我們就把服務器上面的key跟oschina平台進行了關聯。
2、clone項目
接着我們通過git clone命令把test111項目clone下來,記得clone的地址是ssh而不是https哦,這個時候會提示我們輸入用戶名和密碼,其分別是oschina的賬號和密碼。
如果你手賤是以https的方式進行clone的,可以通過下面的命令重新設置遠程倉庫地址(沒有則可跳過此步驟)
// 移除之前的遠程倉庫地址 git remote remove origin // 新增遠程倉庫地址為ssh,非https git remote add origin git@git.oschina.net:wwolf/test111.git
3、多賬號兼容問題
到這里,對於test111項目pull push操作基本上都是沒有問題的了。如果說用戶222想在這台服務器上面對項目test222進行管理,我們直接執行git clone git@git.oschina.net:222/test222.git之后,報錯了,提示如下:
Access denied. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
為什么呢?首先最重要的問題肯定是key的問題了!因為我們之前並未層在這台服務器增加key關聯到用戶222的oschina賬號!那我們就按照步驟1重新在服務器上為用戶222添加一個key吧,不過需要注意的是,我們的key保存的文件要重命名了,不然可就把用戶111創建的key覆蓋了!
ssh-keygen -t rsa -C "賬號222的郵箱@qq.com" //接下來會提示我們想要把key保存在哪個文件,重新輸入文件名即可 Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_2 //接着回車回車回車完事,重要的話說三遍!
然后我們登錄賬號222的oschina賬號添加key
但是問題出現了,這個時候我們重新clone test222依舊提示我們沒權限,怎么回事???本篇文章的中心主題曝光了!廢話了一堆,開始說重點--------------------------
其實這個時候我們clone test222項目時,git是拿默認的id_rsa.pub文件里面的key去對比的,這肯定是有問題的嘛,因為222賬號並沒有添加這個key!那也就是說我們這里如果clone test222的時候讓git拿着id_rsa_2.pub文件里面的key去驗證不就完事了么?是的,就是這樣!我們看實現步驟:
首先我們讓git識別我們新增的key
ssh-agent bash
ssh-add ~/.ssh/id_rsa_2
接着我們在~/.ssh/ 目錄下新建或者修改config文件
#Host 是你遠程倉庫的地址,注意哦,如果有些服務器做的ip端口轉發,這里不要帶上端口號 Host git.oschina.net #HostName 是遠程倉庫的地址,同樣如果做的端口轉發也不應帶端口號 HostName git.oschina.net #Port 端口號,如果有做轉發需要在這里填寫端口號,沒有就不必要填 #Port 8800 #用戶 User 111 #識別key的文件 IdentityFile ~/.ssh/id_rsa #都指向同一個平台的話,下面的Host需要做個處理,因為我們在用這個key的時候根據Host從上到下進行查找,不做修改肯定會先查找到第一個key,依舊無效,隨便改就好了,其他參數不做特殊處理 Host git222.oschina.net HostName git.oschina.net #Port 8800 User 222 IdentityFile ~/.ssh/id_rsa_2
可以看到,我們對222用戶的Host做了處理,那么我們就需要修改下222的遠程倉庫地址了
// 原倉庫地址 git@git.oschina.net:222/test222.git // 修改為 git@git222.oschina.net:222/test222.git
也就是說這個時候用戶222只需要執行命令
git clone git@git222.oschina.net:222/test222.git
就可以了!就可以了!!!
cd test222/ //發現git pull git push也都沒有任何問題
同一服務器,不同托管平台,多個賬號問題
這多個平台的問題基本上就簡單了,為了舉例說明,我們用gitlab平台的333賬號的項目test333進行測試,注意哦,我們是注冊第三個賬號在上面兩個賬號的基礎之上進行的測試
git clone git@gitlab.com:333/test333.git // 可想而知,同樣是沒權
因為沒那么多郵箱,我們注冊gitlab依舊使用的是用戶222的郵箱,不過這對我們的操作沒任何影響,無非就是多創建一個id_rsa_3文件而已,鑒於此,我們直接拷貝id_rsa_2.pub里面的key到gitlab平台。
然后在~/.ssh/config文件內添加gitlab平台的配置即可
Host gitlab.com HostName gitlab.com #Port 8800 User 333 //因為gitlab的郵箱跟用戶222一致,這里用這個key,如果不一致,你仍然需要生成新的key,這里引用新的key文件 IdentityFile ~/.ssh/id_rsa_2
回過頭來看看,git多賬號的問題不難操作嘛,完美解決!查看原文