据我所知,Git的blob将SHA1哈希作为文件名,以便不复制存储库中的文件.
例如,如果文件A的内容为"abc"并且SHA1散列为"12345",则只要内容不变,则提交/分支可以指向相同的SHA1.
但是,如果将文件A修改为"def"以使SHA哈希"23456",会发生什么?Git是否存储文件A和修改过的文件A(不仅仅是区别,而是整个文件)?
以下"Git社区图书"回答了我的大部分问题.
值得注意的是,这与您可能熟悉的大多数SCM系统有很大不同.Subversion,CVS,Perforce,Mercurial等都使用Delta Storage系统 - 它们存储一个提交和下一个提交之间的差异.Git不会这样做 - 它会在每次提交时存储项目中所有文件在此树结构中的外观.这是使用Git时要理解的一个非常重要的概念.
git按内容而不是差异存储文件,因此在您的示例中,A("abc"和"def")的两个版本都将存储在对象数据库中.
它可以更好地存储整个对象,因为通过比较它们的SHA很容易看出文件的两个版本是否相同.有关如何存储对象的详细信息,请查看git-book.这样做效果更好,因为如果使用差异跟踪文件,则需要文件的整个历史记录来重建它.在集中式系统中很容易做到,但在分布式系统中则不容易,对文件可以进行许多不同的更改.
Git直接从对象执行diff.
| 归档时间: |
|
| 查看次数: |
3546 次 |
| 最近记录: |