天天看點

Git教程5——遠端倉庫

遠端倉庫

遠端倉庫是指托管在網際網路或其他網絡中的你的項目的版本庫。 你可以有好幾個遠端倉庫,通常有些倉庫對你隻讀,有些則可以讀寫。 與他人協作涉及管理遠端倉庫以及根據需要推送或拉取資料。 管理遠端倉庫包括了解如何添加遠端倉庫、移除無效的遠端倉庫、管理不同的遠端分支并定義它們是否被跟蹤等等。我們就以知名的GitHub網站為例,使用GitHub隻要注冊一個GitHub賬号,就可以免費獲得Git遠端倉庫。

由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,是以需要進行一下設定:

第一步:建立SSH Key。在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案:

如果有的話,直接跳過此步,如果沒有的話,打開Shell(Windows下打開Git Bash),建立SSH Key:

$ ssh-keygen -t rsa -C"[email protected]"           

然後一路回車,使用預設值即可,如果一切順利的話,可以在使用者主目錄裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是SSH Key的秘鑰,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第二步:登入github,打開” settings”中的SSH andGPG Keys頁面,然後點選“New SSH Key”,填上任意title,在Key文本框裡粘貼id_rsa.pub檔案的内容。

點選 Add Key,你就應該可以看到已經添加的key。

GitHub需要SSH Key的目的就是因為GitHub需要識别出你推送的送出确實是你推送的,而不是别人冒充的,而Git支援SSH協定,是以,GitHub隻要知道了你的公鑰,就可以确認隻有你自己才能推送。

當然,GitHub允許你添加多個Key。假定你有若幹電腦,你一會兒在公司送出,一會兒在家裡送出,隻要把每台電腦的Key都添加到GitHub,就可以在每台電腦上往GitHub推送了。

最後友情提示,在GitHub上免費托管的Git倉庫,任何人都可以看到喔(但隻有你自己才能改)。是以,不要把敏感資訊放進去。

如果你不想讓别人看到Git庫,有兩個辦法,一個是交點保護費,讓GitHub把公開的倉庫變成私有的,這樣别人就看不見了(不可讀更不可寫)。另一個辦法是自己動手,搭一個Git伺服器,因為是你自己的Git伺服器,是以别人也是看不見的。這個方法我們後面會講到的,相當簡單,公司内部開發必備。

添加遠端庫

現在的情景是我們已經在本地建立了一個Git倉庫後,又想在github建立一個Git倉庫,并且希望這兩個倉庫進行遠端同步,這樣github的倉庫可以作為備份,又可以其他人通過該倉庫來協作。首先,登陸GitHub,右上角的“+”号和右邊的綠色按鈕“New repository”都可以建立一個新的倉庫:

在Repository name填入mygit,其他保持預設設定,點選“Create repository”按鈕,就成功地建立了一個新的Git倉庫:

目前,在GitHub上的這個mygit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關聯,然後,把本地倉庫的内容推送到GitHub倉庫。

現在,我們根據GitHub的提示,在本地的mygit倉庫下運作指令:

$ git remote add origin https://github.com/xuemengrui12/mygit.git           

添加後,遠端庫的名字就是origin,這是Git預設的叫法,也可以改成别的,但是origin這個名字一看就知道是遠端庫。

下一步,就可以把本地庫的所有内容推送到遠端庫上:

$ git push -u origin master           

把本地庫的内容推送到遠端,用git push指令,實際上是把目前分支master推送到遠端。

由于遠端庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支内容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令。

推送成功後,可以立刻在GitHub頁面中看到遠端庫的内容已經和本地一模一樣:

從現在起,隻要本地作了送出,就可以通過指令:

$ git push origin master           

把本地master分支的最新修改推送至GitHub,現在,你就擁有了真正的分布式版本庫!

從遠端庫克隆

上面我們已經了解了如何先有本地庫,後有遠端庫時候再關聯的過程。現在假如遠端庫有新的内容了,我想克隆到本地來,如何克隆呢?首先,登入github,建立一個新的倉庫,例如testgit,我們勾選

Initialize this repository with a README

,這樣GitHub會自動為我們建立一個

README.md

檔案。建立完畢後,可以看到

README.md

檔案:

現在,遠端庫已經準備好了,下一步是使用指令git clone克隆一個本地庫了,選好你要放置的目錄位置

接着在我本地目錄下生成testgit目錄,如下所示:

你也許還注意到,GitHub給出的位址不止一個,實際上,Git支援多種協定,預設的

git://

使用ssh,但也可以使用

https

等其他協定。使用

https

除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入密碼,但是在某些隻開放http端口的公司内部就無法使用

ssh

協定而隻能用

https

檢視遠端倉庫

如果想檢視你已經配置的遠端倉庫伺服器,可以運作 git remote 指令。 它會列出你指定的每一個遠端伺服器的簡寫。 如果你已經克隆了自己的倉庫,那麼至少應該能看到 origin - 這是 Git 給你克隆的倉庫伺服器的預設名字:

你也可以指定選項 

-v

,會顯示需要讀寫遠端倉庫使用的 Git 儲存的簡寫與其對應的 URL。

如果你的遠端倉庫不止一個,該指令會将它們全部列出。如果想要檢視某一個遠端倉庫的更多資訊,可以使用 

git remote show [remote-name]

 指令。 如果想以一個特定的縮寫名運作這個指令,例如 

origin

,會得到像下面類似的資訊:

從遠端倉庫中抓取與拉取

從遠端倉庫中獲得資料,可以執行:

$ git fetch [remote-name]           

這個指令會通路遠端倉庫,從中拉取所有你還沒有的資料。執行完成後,你将會擁有那個遠端倉庫中所有分支的引用,可以随時合并或檢視。

如果你使用 clone 指令克隆了一個倉庫,該指令會自動将其添加為遠端倉庫并預設以 “origin” 為簡寫。 是以,git fetch origin 會抓取克隆(或上一次抓取)後新推送的所有工作。 必須注意 git fetch 指令會将資料拉取到你的本地倉庫——它并不會自動合并或修改你目前的工作。 當準備好時你必須手動将其合并入你的工作。

如果你有一個分支設定為跟蹤一個遠端分支,可以使用 git pull 指令來自動的抓取然後合并遠端分支到目前分支。 這對你來說可能是一個更簡單或更舒服的工作流程;預設情況下,git clone 指令會自動設定本地 master 分支跟蹤克隆的遠端倉庫的 master 分支(或不管是什麼名字的預設分支)。 運作 git pull 通常會從最初克隆的伺服器上抓取資料并自動嘗試合并到目前所在的分支。

推送到遠端倉庫

當你想分享你的項目時,必須将其推送到上遊。 這個指令很簡單:

git push [remote-name] [branch-name]

。 當你想要将 master 分支推送到 

origin

 伺服器時(再次說明,克隆時通常會自動幫你設定好那兩個名字),那麼運作這個指令就可以将你所做的備份到伺服器:

$ git push origin master           

隻有當你有所克隆伺服器的寫入權限,并且之前沒有人推送過時,這條指令才能生效。 當你和其他人在同一時間克隆,他們先推送到上遊然後你再推送到上遊,你的推送就會毫無疑問地被拒絕。 你必須先将他們的工作拉取下來并将其合并進你的工作後才能推送。

遠端倉庫的移除

如果因為一些原因想要移除一個遠端倉庫 - 你已經從伺服器上搬走了或不再想使用某一個特定的鏡像了,又或者某一個貢獻者不再貢獻了,可以使用 

git remote rm

 :

$ git push origin master           

由于個人水準有限,寫作中難免有很多問題,忘大家不吝賜教,謝謝!

參考:

http://www.cnblogs.com/MrJun/p/3351478.html http://blog.csdn.net/zsq520520/article/details/51004721

繼續閱讀