据我所知,Git 的 blob 将 SHA1 哈希值作为文件名,以避免在存储库中重复文件。
例如,如果文件 A 的内容为“abc”,SHA1 哈希为“12345”,只要内容不改变,提交/分支就可以指向相同的 SHA1。
但是,如果将文件 A 修改为“def”以使其 SHA 哈希值“23456”,会发生什么情况? Git是否存储文件A和修改后的文件A(不仅仅是区别,而是整个文件)?
- 如果是这样,那是为什么呢?存储差异信息不是更好吗?
- 如果不是,diff 如何跟踪文件中的更改?
- 其他 VCS 系统 - CVS/SVN/Perforce...怎么样?
ADDED
以下来自“Git 社区书籍”的内容回答了我的大部分问题。
值得注意的是,这与您可能熟悉的大多数 SCM 系统有很大不同。 Subversion、CVS、Perforce、Mercurial 等都使用 Delta 存储系统 - 它们存储一次提交与下一次提交之间的差异。 Git 不会执行此操作 - 每次提交时,它都会在此树结构中存储项目中所有文件的快照。这是使用 Git 时需要理解的一个非常重要的概念。
git 按内容而不是差异存储文件,因此在您的示例中,A 的两个版本(“abc”和“def”)都将存储在对象数据库中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)