2014-04-08 145 views
2

我不明白這個優點。我看到它在諸如this article之類的地方爭論過,取而代之的是提取機會在將它們合併到本地分支之前檢查這些更改。git fetch有什麼意義?

但是,例如在該文章中,作者使用git diff master origin/master通過將新獲取的分支與其本地主控進行比較來檢查所做的更改。

這是我感到困惑的地方....無論您是否先取得指令,該命令都會起作用。無論哪種方式,它都比較本地主人和遠程主人。您不需要獲取將本地分支與遠程分支進行比較。

我錯過了什麼?

回答

6

您錯過了git fetch已用於更新遠程分支的本地副本。

所以你提到的命令會做當地分支master本地副本的origin/master,而不是起源master分支的實際狀態之間的difffetch將連接到遠程服務器並下載遠程的所有更改(更改分支,標籤...)。

一如既往,git manual on Branching and Remote Branches解釋得很好。

+0

哇。不知道。真的?沒有提取,沒有辦法與遠程分支進行比較?你必須有一個遠程分支的「本地版本」? – Aerovistae

+0

因爲git是一個分佈式的CVS,你本地的git倉庫將擁有它的本地分支(默認情況下爲'master')。但是,如果您使用一個或多個遠程服務器,git將製作這些服務器狀態的本地副本。他們可能有一些當地的分支機構或不同的分支機構。我不知道有什麼方法可以直接對遠程回購進行差異化...(至少不在git本身中)。 – achedeuzot

+2

爲了與遠程倉庫進行比較,您必須下載該倉庫的狀態。網絡操作可能會很慢。非常慢爲了不會受到網絡操作的懲罰*每次運行diff時,git只在明確請求時才進行下載。這就是'git fetch'所做的。 –

-4

fetch是下級命令;例如,pull就是用它來實現的。在大多數情況下,您可能不會直接使用它。

+0

我強烈反對這一說法。 'git fetch'非常有用(詳情請參閱公認的答案),我建議人們在幾乎所有情況下都使用它(結合'git diff'和'git merge'),而不是'git pull'。 – Chris

+0

我也不會同意'fetch'比'pull'更「低級」。在Git中有[兩個「級別」的命令](http://stackoverflow.com/questions/6976473/what-does-the-term-porcelain-mean-in-git),''fetch''和'pull'都是「瓷器」,而不是「管道」。 – Chris