【发布时间】:2019-08-31 08:00:23
【问题描述】:
当被问及 Git 在他的 Tech Talk at Google in 2007 (43:09) 期间可以处理多少文件时引用 Linus Torvalds:
...Git 跟踪您的内容。它从不跟踪单个文件。您无法在 Git 中跟踪文件。你可以做的是你可以跟踪一个只有一个文件的项目,但是如果你的项目只有一个文件,那么一定要这样做并且你可以做到,但是如果你跟踪 10,000 个文件,Git 永远不会将它们视为单独的文件。 Git 认为一切都是完整的内容。 Git 中的所有历史都是基于整个项目的历史……
(成绩单here。)
然而,当您深入了解the Git book 时,您会被告知的第一件事是 Git 中的文件可以跟踪或未跟踪。此外,在我看来,整个 Git 体验都是针对文件版本控制的。当使用git diff 或git status 时,输出是基于每个文件呈现的。使用git add 时,您还可以根据每个文件进行选择。您甚至可以基于文件查看历史记录,而且速度极快。
应该如何解释这句话?在文件跟踪方面,Git 与 CVS 等其他源代码控制系统有何不同?
【问题讨论】:
-
reddit.com/r/git/comments/5xmrkv/what_is_a_snapshot_in_git - “对于你目前所处的位置,我怀疑 更重要的是要意识到 Git 向用户呈现文件的方式与其内部处理文件的方式之间存在差异“ (这与 Subversion 等形成鲜明对比。)
-
Git 不跟踪文件,它跟踪 changesets。大多数版本控制系统跟踪文件。作为一个如何/为什么这很重要的例子,尝试将一个空目录签入 git(spolier:你不能,因为那是一个“空”变更集)。
-
@ElliottFrisch 这听起来不对。您的描述更接近于例如darcs 确实如此。 Git 存储快照,而不是变更集。
-
我认为他的意思是 Git 不会直接跟踪文件。文件包括其名称和内容。 Git 将内容作为 blob 进行跟踪。仅给定一个 blob,您无法知道其对应的文件名是什么。它可能是不同路径下具有不同名称的多个文件的内容。路径名和 blob 之间的绑定在树对象中描述。
-
相关:Randal Schwartz'followup to Linus' talk(也是 Google 技术讲座)-“...... Git 的真正意义...... Linus 说了 Git 不是什么”。
标签: git version-control