2014-06-25 137 views
0

我正在閱讀Pro Git書籍,並且跟蹤和未跟蹤的定義對我來說不是100%清晰的。究竟跟蹤與未跟蹤?

從書中可以看出:「追蹤文件是上一次快照中的文件;它們可以是未經修改,修改或暫存的文件,未經追蹤的文件是其他任何文件 - 工作目錄中的任何不在上次快照中的文件,不在你的臨時區域。「

下面是萬一章鏈接您想了解更多背景:http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository

什麼是困惑我的是那句「最後一個快照。」臨時區域(或索引,如果你喜歡這個詞)被認爲是快照,並且提交也是快照,是正確的嗎?

我也有一些簡單的情況下,我想澄清這將是很清楚,我這個概念了:

方案1:說我有文件A和B.我COMMITED A,然後後來我B階段 由於臨時區域是最近的快照,B是否被跟蹤且A未跟蹤?

場景2:假設我有文件A和B.我提交了A,然後我提交了B.
A被認爲未被跟蹤?

場景3:我執行一個git克隆將一些文件X放入我的本地存儲庫。 X被跟蹤,因爲我的本地存儲庫是我最近(唯一)的快照?

回答

3

我承認這可以在本書中加以說明。我的閱讀(以及許多工具使用的通用術語)是「最後快照」表示HEAD提交;在這個術語中,「最後的快照」從來不指索引。因此,如果文件既不在HEAD中,也不在索引中,則文件具有「未跟蹤的更改」。

情況1:不是.A和B都被跟蹤,因爲A在HEAD中,B在上演。

情景2:不是,A和B都在HEAD中。

情景3:是的。 X在HEAD中。

如果您只是創建一些文件C而不添加或提交文件,您將擁有一個「未跟蹤」文件。

回想一下,提交是當時存儲庫的表示。因此,如果您添加並提交一些文件AB,並進一步提交(不會更改AB),那麼這些文件仍然存在於HEAD提交中。因此(無論他們在存儲庫中存在了多久),他們仍被視爲「已跟蹤」,直到您將其刪除。

+2

這使得引用中的定義略有錯誤:如果「last snapshot」=「與HEAD關聯的樹」,並且索引中但不包含在該樹中的路徑現在「被跟蹤」,那麼它應該說「跟蹤文件是在最後的快照,索引,或兩者」。我認爲這將是對「追蹤文件」的準確表徵。 – torek

+1

是的,我同意。我依賴於第二句的準確性(「未跟蹤的文件就是其他所有內容 - 工作目錄中的任何文件都不在您上次的快照中,並且不在您的暫存區域中」)。就目前而言,這兩句話不一致,並暗示有某種類型的文件沒有被追蹤,也沒有被追蹤(「上演?」)。但我*認爲*其意圖是在這個術語中「追蹤」階段性變化。 –

+0

我同意torek。謝謝澄清,愛德華。 另外,謝謝你的偉大答案。我還有一個場景,對不起!假設我有頭文件A和B。而且在很長一段時間裏,我一直在修改這兩個文件,但只提交了答案A.即使頭部存在一個超舊版本,B仍然被視爲被跟蹤了嗎? – Kacy

1

我理解它的方式,跟蹤的文件是您已經編輯或已經提交的所有內容。 git會在您的文件系統上看到任何其他文件,但不會跟蹤它們。也就是說,它沒有記錄對這些文件的更改。