Tracked与Untracked究竟是什么?

时间:2014-06-25 18:25:26

标签: git

我正在阅读Pro Git书籍,跟踪和未跟踪的定义对我来说并非100%清晰。

从书中可以看出:“跟踪文件是最后一个快照中的文件;它们可以不被修改,修改或暂存。未跟踪文件就是其他所有内容 - 工作目录中不在上一个快照中的任何文件都是不在您的临时区域。“

如果您需要更多上下文,请参阅本章的链接:http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository

令我困惑的是“最后一次快照”这个短语。暂存区域(或索引,如果您更喜欢该术语)被视为快照,提交也是快照,是否正确?

我还有一些简单的场景,我想澄清一下,这对我来说真的很清楚这个概念:

场景1:说我有文件A和B.我提交了A,然后我提交了B. 是否跟踪B和A未跟踪,因为暂存区域是最近的快照?

场景2:说我有文件A和B.我提交了A,然后我提交了B.
A被认为是未跟踪的吗?

场景3:我执行git clone将一些文件X放入我的本地存储库。跟踪X是因为我的本地存储库是我最近的(仅)快照吗?

2 个答案:

答案 0 :(得分:3)

我承认这可以在书中使用澄清。我的阅读(以及许多工具使用的常用术语)是“最后一个快照”意味着HEAD提交;在这个术语中,“最后一个快照”从不引用索引。因此,如果文件既不在HEAD中也不在索引中,则文件具有“未跟踪的更改”。

场景1:否。跟踪A和B,因为A在HEAD中,B在上演。

场景2:否.A和B都在HEAD中。

场景3:是的。 X在HEAD。

如果您只是创建一些文件C而不添加或提交文件C,您将拥有一个“未跟踪”文件。

进一步回想一下,commit是当时存储库的表示。因此,如果您添加并提交一些文件AB,并进行进一步提交(不会更改AB),那么这些文件仍然存在于HEAD中承诺。所以(无论他们在存储库中存在多长时间),在删除它们之前,它们仍被视为“已跟踪”。

答案 1 :(得分:1)

我理解它的方式,跟踪文件是您git add已经或已经提交的所有内容。 git将在您的文件系统上看到任何其他文件,但不会跟踪它们。也就是说,它没有记录对这些文件的更改。