2014-06-25 135 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会在您的文件系统上看到任何其他文件,但不会跟踪它们。也就是说,它没有记录对这些文件的更改。