使用GitHub時(shí),國(guó)內(nèi)的用戶經(jīng)常遇到的問(wèn)題是訪問(wèn)速度太慢,有時(shí)候還會(huì)出現(xiàn)無(wú)法連接的情況(原因你懂的)。
如果我們希望體驗(yàn)Git飛一般的速度,可以使用國(guó)內(nèi)的Git托管服務(wù)——碼云(gitee.com)。
和GitHub相比,碼云也提供免費(fèi)的Git倉(cāng)庫(kù)。此外,還集成了代碼質(zhì)量檢測(cè)、項(xiàng)目演示等功能。對(duì)于團(tuán)隊(duì)協(xié)作開(kāi)發(fā),碼云還提供了項(xiàng)目管理、代碼托管、文檔管理的服務(wù),5人以下小團(tuán)隊(duì)免費(fèi)。
碼云的免費(fèi)版本也提供私有庫(kù)功能,只是有5人的成員上限。
使用碼云和使用GitHub類似,我們?cè)诖a云上注冊(cè)賬號(hào)并登錄后,需要先上傳自己的SSH公鑰。選擇右上角用戶頭像 -> 菜單“修改資料”,然后選擇“SSH公鑰”,填寫(xiě)一個(gè)便于識(shí)別的標(biāo)題,然后把用戶主目錄下的.ssh/id_rsa.pub文件的內(nèi)容粘貼進(jìn)去:
點(diǎn)擊“確定”即可完成并看到剛才添加的Key:
如果我們已經(jīng)有了一個(gè)本地的git倉(cāng)庫(kù)(例如,一個(gè)名為learngit的本地庫(kù)),如何把它關(guān)聯(lián)到碼云的遠(yuǎn)程庫(kù)上呢?
首先,我們?cè)诖a云上創(chuàng)建一個(gè)新的項(xiàng)目,選擇右上角用戶頭像 -> 菜單“控制面板”,然后點(diǎn)擊“創(chuàng)建項(xiàng)目”:
項(xiàng)目名稱最好與本地庫(kù)保持一致:
然后,我們?cè)诒镜貛?kù)上使用命令git remote add把它和碼云的遠(yuǎn)程庫(kù)關(guān)聯(lián):
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
之后,就可以正常地用git push和git pull推送了!
如果在使用命令git remote add時(shí)報(bào)錯(cuò):
git remote add origin git@gitee.com:liaoxuefeng/learngit.gitfatal:remote origin already exists.
這說(shuō)明本地庫(kù)已經(jīng)關(guān)聯(lián)了一個(gè)名叫origin的遠(yuǎn)程庫(kù),此時(shí),可以先用git remote -v查看遠(yuǎn)程庫(kù)信息:
git remote -vorigin? ? git@github.com:michaelliao/learngit.git (fetch)origin? ? git@github.com:michaelliao/learngit.git (push)
可以看到,本地庫(kù)已經(jīng)關(guān)聯(lián)了origin的遠(yuǎn)程庫(kù),并且,該遠(yuǎn)程庫(kù)指向GitHub。
我們可以刪除已有的GitHub遠(yuǎn)程庫(kù):
git remote rm origin
再關(guān)聯(lián)碼云的遠(yuǎn)程庫(kù)(注意路徑中需要填寫(xiě)正確的用戶名):
git remote add origin git@gitee.com:liaoxuefeng/learngit.git
此時(shí),我們?cè)俨榭催h(yuǎn)程庫(kù)信息:
git remote -vorigin? ? git@gitee.com:liaoxuefeng/learngit.git (fetch)origin? ? git@gitee.com:liaoxuefeng/learngit.git (push)
現(xiàn)在可以看到,origin已經(jīng)被關(guān)聯(lián)到碼云的遠(yuǎn)程庫(kù)了。通過(guò)git push命令就可以把本地庫(kù)推送到Gitee上。
有的小伙伴又要問(wèn)了,一個(gè)本地庫(kù)能不能既關(guān)聯(lián)GitHub,又關(guān)聯(lián)碼云呢?
答案是肯定的,因?yàn)間it本身是分布式版本控制系統(tǒng),可以同步到另外一個(gè)遠(yuǎn)程庫(kù),當(dāng)然也可以同步到另外兩個(gè)遠(yuǎn)程庫(kù)。
使用多個(gè)遠(yuǎn)程庫(kù)時(shí),我們要注意,git給遠(yuǎn)程庫(kù)起的默認(rèn)名稱是origin,如果有多個(gè)遠(yuǎn)程庫(kù),我們需要用不同的名稱來(lái)標(biāo)識(shí)不同的遠(yuǎn)程庫(kù)。
仍然以learngit本地庫(kù)為例,我們先刪除已關(guān)聯(lián)的名為origin的遠(yuǎn)程庫(kù):
git remote rm origin
然后,先關(guān)聯(lián)GitHub的遠(yuǎn)程庫(kù):
git remote add github git@github.com:michaelliao/learngit.git
注意,遠(yuǎn)程庫(kù)的名稱叫g(shù)ithub,不叫origin了。
接著,再關(guān)聯(lián)碼云的遠(yuǎn)程庫(kù):
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
同樣注意,遠(yuǎn)程庫(kù)的名稱叫g(shù)itee,不叫origin。
現(xiàn)在,我們用git remote -v查看遠(yuǎn)程庫(kù)信息,可以看到兩個(gè)遠(yuǎn)程庫(kù):
git remote -vgitee? ? git@gitee.com:liaoxuefeng/learngit.git (fetch)gitee? ? git@gitee.com:liaoxuefeng/learngit.git (push)github? ? git@github.com:michaelliao/learngit.git (fetch)github? ? git@github.com:michaelliao/learngit.git (push)
如果要推送到GitHub,使用命令:
git push github master
如果要推送到碼云,使用命令:
git push gitee master
這樣一來(lái),我們的本地庫(kù)就可以同時(shí)與多個(gè)遠(yuǎn)程庫(kù)互相同步:
碼云也同樣提供了Pull request功能,可以讓其他小伙伴參與到開(kāi)源項(xiàng)目中來(lái)。你可以通過(guò)Fork我的倉(cāng)庫(kù):https://gitee.com/liaoxuefeng/learngit,創(chuàng)建一個(gè)your-gitee-id.txt的文本文件,寫(xiě)點(diǎn)自己學(xué)習(xí)Git的心得,然后推送一個(gè)pull request給我,這個(gè)倉(cāng)庫(kù)會(huì)在碼云和GitHub做雙向同步。