任何人都可以给我一些想法,为什么git开发人员做出设计决定来存储文件(blob)的内容,所以当内容更改时,需要创建一个新的blob?
我认为subversion存储修订而不是内容,所以当内容发生变化时,它只是跟踪两者之间的差异.难道git也不是这样做的吗?存储内容而不是修订版有什么好处?
Bev*_*van 11
我找不到快速谷歌的答案,但我相信它归结为一个简单的"它没关系'导致磁盘空间便宜".
在源代码管理工具中存储修订版很棘手.如果您只存储先前版本和当前版本之间的差异,则最终会出现两个问题:
我相信大多数现代VCS实际上存储了最新版本(出于性能原因),如果使用差异,它们会被用来回溯,而不是前进.
解决此(及相关)问题的文章是Repository Formats Matter.这是影响我几年前搬到Git的决定的文章之一.这是一段摘录:
鉴于这一论点,我应该清楚我认为git的存储库结构比其他存储库结构更好,至少对于X.org的使用模型而言.它似乎拥有几个有趣的属性:
永远不会修改包含对象数据的文件.一旦写入,每个文件从那一点开始是只读的.
压缩是离线完成的,可以延迟到主要对象保存到备份媒体之后.此方法提供比任何增量方法更好的压缩,允许在磁盘上重新排序数据以匹配使用模式.
对象数据本质上是自我检查的; 您无法在第一次引用对象时修改存储库中的对象并转义检测.