之前的操作我們只是把Git當做了一個倉庫,做本地的一個版本管理,這對Git來說簡直大材小用。Git作為分布式版本控制系統(tǒng),分布才是其特色,如何分布呢?肯定要有一臺機器充當原始的版本庫,其他的機器“克隆”這個原始版本庫,其實每臺機器上的版本都一樣,沒有主次之分,之所以有原始版本庫,是為了方便多人協(xié)作時候有一個基準,讓各機器上的版本保持一致。一般情況下,原始的版本庫不會跟我們工作的電腦在一起,它對于我們來說是遠程的,所以我們可以稱之為遠程倉庫。
? ? 既然是遠程,肯定還需要一臺機器充當服務(wù)器(原始版本庫),而且這臺機器需要保證24小時開機,這樣才能保證其他用戶可以隨時克隆原始版本,推送提交到該服務(wù)器,拉取別人的提交。我們目前只是為了學習Git,特意找個服務(wù)器劃不來,好在大Git地位超然,很多網(wǎng)站紛紛提供Git倉庫托管服務(wù),像是國內(nèi)外都著名的github.com,國內(nèi)著名的git.oschina.net。雖然兩者都能夠提供托管服務(wù),但是github免費建立的只有公倉(對所有用戶都可見),私倉(僅對自己可見)是要付費的,而oschina的公私倉都不需要付費,而且是國貨,理應(yīng)支持,因此小編就選擇了oschina建立遠程倉庫。
? ? 關(guān)于在oschina申請賬號這里就不再復(fù)述了,假定你已經(jīng)擁有了賬號并登錄,那么我們就可以建立一個遠程倉庫了。在oschina上創(chuàng)建一個遠程倉庫很簡單,我們點擊新建項目,我們必須要填寫的只有項目名,其他的可以根據(jù)你的需要進行選擇,有一點需要提示的是,如果你已經(jīng)有g(shù)it項目想要直接推送到遠程倉庫,不要讓遠程倉庫初始化,也就是不要勾選“使用Readme文件初始化這個項目”,如果你不想讓別人看見你這個項目,勾選“私有項目”。
? ??
? ? 我們成功了建立了一個空的遠程倉庫,里面什么都沒有,于是乎給了我們友情提示,告訴我們應(yīng)該怎么做。
? ? 雖然他們真的很用心,但是并沒有面面俱到,沒關(guān)系,就由小編來補充他們的一些不足吧。不同的兩臺電腦之間需要進行數(shù)據(jù)傳輸,肯定需要橋梁,oschina為我們提供了兩種選擇,一種是HTTPS,一種是SSH。如果使用HTTPS,倒是不用做什么特別的事情,上述教程足以讓你把本地項目成功推送到遠程倉庫,但是每次推送都需要輸入賬號和密碼(oschina的賬號密碼),十分麻煩,因此我們可以選擇另一種方式,SSH。
? ? 使用SSH就需要創(chuàng)建SSH Keys,很多人不知道如何創(chuàng)建,沒關(guān)系,oschina想到了這點,特意給除了教程。
? ??
? ??Linux的跟著教程走就行,下面我們來看下windows的。我們使用Git Bash終端,然后同樣輸入
[plain]?view plain?copyssh-keygen?-t?rsa?-C?"zhangsan@gmial.com"??
然后一路回車即可。在"C:Documents and SettingsAdministrator.ssh"中就有我們需要的文件id_rsa.pub。???
然后打開oschina添加SSH公鑰的地方,點擊這里,前提是你已經(jīng)登陸了。然后輸入個標題,把剛才生成的id_rsa.pub中的內(nèi)容拷貝一份到公鑰處,然后點擊確定即可,這樣準備工作就已經(jīng)完成了。
? ? 接著我們就可以通過SSH溝通本地倉和遠程倉了。? ??? ??添加遠程倉庫[plain]?view plain?copygit?remote?add?osc-git?git@git.oschina.net:XXXXXXX/git.git??其中g(shù)it remote是告訴Git要執(zhí)行遠程倉庫相關(guān)命令,add是添加,osc-git是遠程倉庫名(很多教程使用origin作為遠程倉庫名,非必須,可以根據(jù)情況進行修改),為簡化書寫遠程倉庫地址而存在,以后進行遠程相關(guān)操作的時候只需要使用遠程倉庫名即可,git@……則是我們遠程倉庫實際的SSH地址,就這樣,我們便成功的添加了一個遠程倉庫。
? ??查看遠程倉庫[plain]?view plain?copygit?remote?????//只輸出遠程倉庫名稱??git?remote?-v??//輸出遠程倉庫名和地址??
? ??刪除遠程倉庫[plain]?view plain?copygit?remote?rm?osc-git??
? ??推送到遠程倉庫? ? git push命令用于將本地分支的更新推送到遠程分支。[plain]?view plain?copygit?push?