我的问题比标题中声明的更为通用。
我知道源版本控制仅存储有关差异的信息。 据我所知,维基百科也是如此,github也是如此。
但他们都有能力显示特定修订版的整个文件。他们是否会逐步将其从第一次修订恢复到特定版本?
还有一个问题。如果他们只存储差异,他们如何用上下文显示它们(更改前后的一点点文本)。
编辑: github存储整个快照而不是增量
答案 0 :(得分:6)
我知道源版本控制仅存储有关差异的信息。
正如问题Git design decision on storing content rather than differences所示,这不是完全 Git的作用。
它确实具有“打包”格式,以使用来自LibXDiff库的二进制增量以deltaified形式存储对象。但这主要用于网络传输
请参阅“Is the git binary diff algorithm (delta storage) standardized?”
这就是为什么当你获取时git是“resolving delta”。
答案 1 :(得分:4)
有关存储版本控制数据的不同方式的优缺点的非常有趣的读物,我强烈建议阅读Eric Sink的文章Time and Space Tradeoffs in Version Control Storage。
存储是版本控制最困难的挑战之一 系统。对于每个文件,我们必须存储每个版本 存在。版本控制存储库的逻辑大小永远不会 收缩。它只是不断增长和成长,以及每个旧版本 需要保持可用。
那么,存储每个版本的最佳方法是什么?
答案 2 :(得分:3)
维基百科,遗憾的是......将某些形式的XML(?)中的每个修订版本保留为文本。
看看wikipedia database schema。特别是最近的更改和文字。
因此,他们对“生物学”页面的第一个副本进行了精彩的O(1)查找。这有一个令人遗憾的副作用,导致维基百科technology cost从2010 - 2011年的800万美元增长到2011 - 2012年的1200万美元。尽管HDD(以及其他所有东西)变得越来越便宜,而且价格也越来越贵。
对于保存每个文件的修订控制如此之多。 Git采取了一种可爱的方法。见Is the git storage model wasteful?。
它存储每个文件,类似于上面的方法。一旦回购所占用的空间超过一定限度,它就会进行强力重新包装(这是一个选项,用于设定它的尝试次数 - - 窗口= [N], - 深度= [N]),这可能需要数小时。它对所述重新打包使用delta和无损压缩的组合(递归delta,然后对你拥有的任何位应用无损)。
像SVN这样的其他人使用简单的delta压缩。 (从记忆中,你不应该相信)。
脚注: 增量压缩存储增量变化。 无损压缩非常像zip,rar等。