2016-12-30 33 views
3

熟悉git的人可以幫助我理解回購和分支之間的區別。我最近被介紹給git,並且有點難以理解它們。我被告知將一個遠程回購(例如foo)克隆到我的本地盒子。然後創建一個本地分支。在分支上工作(更新/創建/刪除文件)並添加/提交/推送到遠程服務器(例如bitbucket)。第二組眼睛檢查分支後,說好。然後它被合併到開發或主分支。git中的repository和branch有什麼區別?

那麼存儲庫在這張圖片中扮演什麼角色?對我來說,我運行的所有操作都是針對分支的...

+1

回購包含多個分支 - 正如你所說,你*添加*分支 –

+0

不是我downvote。您可以將回購看作是遠程分支機構居住的地方。本地分支是您完成所有工作的地方,本地分支與遠程分支同步。 –

回答

6

A 存儲庫是您在計算機上克隆的整個項目(目錄和文件)。 A 分支是您的存儲庫的版本

存儲庫包含多個分支(=存在多個版本的存儲庫,並行開發了多個功能)。畢竟,對代碼進行版本控制的目的是可以同時處理項目的多個方面 - 每個方案都在不同的分支中發展。 Git在「分支」旁邊使用表達式「working tree」(表示工作臺)。充滿意象,不是嗎?

相關:如果你想知道differences between local and remote branches


關於你處理分支的方式:

克隆遠程回購(例如FOO)到我的本地框。然後創建一個本地分支。在分支上工作(更新/創建/刪除文件),並添加/提交/推送到遠程服務器

這是一個很好,乾淨的方式來使用git。我建議你總是這樣進行:

----A---B---C--  (REMOTE, master) 

      | 
      |  (Pull to local : `git pull origin master`) 
      v 

----A---B---C--  (LOCAL, master) 

然後從本地主機(git checkout -b branch1)創建一個分支,它的工作,提交更改,並推送到遠程:

----A---B---C------  (REMOTE, master) 

----A---B---C---D--  (REMOTE, branch1) 

      ^
       | 
       |  (Push to remote : `git push origin branch1`) 

----A---B---C------  (LOCAL, master) 
      \ 
       D----  (LOCAL, branch1) 

然後,當對你的功能/修復/無論什麼感到滿意,你可以合併branch1master

2

在Git中,存儲庫引用了整個項目。在一個Git倉庫中,至少有一個branch。您可以使用git branch newFeature在您的存儲庫中創建一個新分支,以跟蹤對與特定新功能相關的代碼庫更改的更改。

無論何時您克隆存儲庫,您都將在本地計算機上創建項目存儲庫的副本。此外,您還將能夠git pull任何其他開發人員推送到公共存儲庫的新更改(瞭解詳情herehere)。

2

存儲庫包含有關項目的所有信息,包括所有更改的歷史記錄。每個更改都以「提交」的形式輸入到存儲庫中。

爲了顯示分支機構和存儲庫之間的差異,我將描述您提到的過程,並指出正在使用的分支機構和存儲庫的方式。這不是一個git教程,只是一個例子,所以我們可以談論分支和回購。

通常存在一個遠程存儲庫,用戶可以獲取其副本並向其提交更改。沒有實際的開發工作直接在遠程倉庫中完成。

用戶通過克隆它來獲取遠程存儲庫的第一個副本。這將在用戶機器上創建一個本地存儲庫。本地回購是遠程回購的完整副本。

分支只是指向存儲庫中某個提交的指針。 在最簡單的情況下,有一個名爲「master」的默認分支,master指向最近的提交。 每個提交都由一個數字標識,這是當時回購的哈希。例如,在這種情況下,master可能指向提交:

2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7 

開發人員可以克隆遠程回購和結賬分支主控。 然後創建並簽出開發分支(例如featureX-dev)。

git checkout -b featureX-Dev 

此時,兩個分支(master和featureX-Dev)指向相同的提交。 更改您的文件。 將更改提交到分支featureX-dev的本地副本。 現在,在您的本地資源庫中,分支featureX-Dev指向比master更新的提交。 將分支featueX-dev推送到遠程回購,以便它可以被審查。

git push -u origin featureX-dev 

-u用於第一次將分支推送到遠程,告訴git你想跟蹤這個分支。

其他開發人員(已經克隆了遠程回購)可以通過執行拉動從遠程存儲庫獲取分支featureX-dev。

當他們檢查並告訴你沒關係的話,你可以將分支featureX-dev和你的本地副本中的主副本合併,並推送主副本。

但是等等!如果其他開發人員已將其更改推送到遠程主服務器,該怎麼辦?

在當地的回購您結賬主

git checkout master 

然後拉主從遠程

git pull origin master 

你必須自己最後一次提交的新變化,別人做,和碩士點。 現在,如果沒有人已經改變了,您可以合併您的Dev分支到主

git merge featureX-dev 

的本地副本高手有沒有做過傷害。合併只會將您的提交添加到主分支。 解決衝突(如果有),然後將主機推回到遠程。

+0

Randy Leberknight,感謝您花時間回覆我。您的詳細回覆肯定會鞏固對我學習過程的理解。祝福有一天! – DaeYoung

相關問題