【发布时间】:2010-09-18 21:09:39
【问题描述】:
据我所知,Git 的 blob 使用 SHA1 哈希作为文件名,以免在存储库中复制文件。
例如,如果文件 A 的内容为“abc”且 SHA1 哈希为“12345”,只要内容不变,提交/分支就可以指向相同的 SHA1。
但是,如果将文件 A 修改为“def”以具有 SHA 哈希“23456”,会发生什么? Git是否存储文件A和修改后的文件A(不仅仅是区别,而是整个文件)?
- 如果是这样,为什么会这样?存储差异信息不是更好吗?
- 如果没有,diff 如何跟踪文件中的更改?
- 其他 VCS 系统 - CVS/SVN/Perforce...怎么样?
添加
“Git Community Book”中的以下内容回答了我的大部分问题。
需要注意的是,这与您可能熟悉的大多数 SCM 系统非常不同。 Subversion、CVS、Perforce、Mercurial 等都使用 Delta 存储系统——它们存储一个提交和下一个提交之间的差异。 Git 不会这样做 - 它会在您每次提交时存储项目中所有文件在此树结构中的样子的快照。这是使用 Git 时要理解的一个非常重要的概念。
【问题讨论】: