git fetch 在抓取遠端追蹤分支時,到底會不會產生副本?
巴扎黑
巴扎黑 2017-06-22 11:52:57
0
1
919

這個問題是在學習Pro git 「遠端分支」時產生的疑問。

問題:
git fetch 在抓取遠端追蹤分支的時候,到底會不會產生本機副本?

先看原文的講解,

如果要同步你的工作,執行 git fetch origin 指令。這個指令尋找「origin」 是哪一個伺服器(在本例中,它是git.ourcompany.com),從中抓取本地沒有的數據,並且更新本地資料庫,移動origin/master 指標指向新的、更新後的位置。

#從圖中來看,因為master分支是本地,從 clone 了遠端倉庫開始(f4265提交點)之後,本地做了兩次提交,產生了新的提交鏈條。同時,伺服器上有其他人推送了提交到伺服器的master分支(31b8e,190a3),因此,當使用git fetch origin 時,我的理解是:
本地master分支不會受到影響,從分叉點即fetch前的origin/master開始,在本地生成了新的一條分支,這條分支確實在本地生成了副本,同時把origin/master指針指向了本地副本的末端。

但讀到下面,又來了這麼一段:

要特別注意的一點是當抓取到新的遠端追蹤分支時,本地不會自動產生一份可編輯的副本(拷貝)。換句話說,在這種情況下,不會有一個新的 serverfix 分支 - 只有一個不可以修改的 origin/serverfix 指標。

我就不懂了,難道我前面的理解是錯的?那 Figure 32 的圖示也是錯的?根本就不會再本地得到 (31b8e,190a3)這兩個提交點,只會在資料庫中得到一個新的 origin/master指標?主要原文說的「從中抓取本地沒有的數據,並且更新本地資料庫」這句話很模糊,這些數據是什麼數據也沒說。

巴扎黑
巴扎黑

全部回覆(1)
给我你的怀抱

沒毛病。

從中抓取本地沒有的數據,並且更新本地資料庫,移動 origin/master 指針指向新的、更新後的位置。

劃重點,這個分支是 master。

當抓取到新的遠端追蹤分支時,本地不會自動產生一份可編輯的副本(拷貝)。 換句話說,在這種情況下,不會有一個新的 serverfix 分支 - 只有一個不可以修改的 origin/serverfix 指標。

所以,需要使用 git checkout -b serverfix origin/serverfix 建立可編輯的本地副本。

只有 master 分支會建立可編輯的本機副本。其它的分支都在 origin/* 下面,需要手動的 git checkout -b

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板