修订控制系统如何恢复修订版本?

7
我的问题比标题声明的更加普遍。
我知道源代码版本控制只存储有关差异的信息。据我所知,维基百科和Github也是如此。
但它们都可以显示特定版本的整个文件。它们是从第一个版本逐步恢复的吗?
另一个问题是,如果它们只存储差异,它们如何在UI中显示上下文(更改前后的一点文本)。
编辑:Github存储完整快照而不是增量。
3个回答

6

4

如果您想了解有关不同版本控制数据存储方式的优缺点的有趣阅读,我强烈推荐阅读Eric Sink的文章《版本控制存储中的时间和空间权衡》

存储是版本控制系统面临的最大挑战之一。对于每个文件,我们必须存储曾经存在过的每个版本。版本控制仓库的逻辑大小永远不会缩小,它只会不断增长,并且每个旧版本都需要保持可用。

那么,存储所有东西的每个版本的最佳方法是什么呢?


3

遗憾的是,维基百科在某种形式上将每个修订版本作为XML文本保存在数据库中。

请查看维基百科数据库架构。特别是最近更改和文本。

因此,他们可以很好地进行O(1)查找到“生物学”页面的第一份副本。这不幸地导致了维基百科的技术成本从2010-2011年的800万美元增加到2011-2012年的1200万美元。尽管硬盘驱动器(以及其他一切)变得更便宜而不是更昂贵。

所以说,保留每个文件的修订控制就这么多问题。Git采用了一种可爱的方法。请参见Git存储模型是否浪费?

它与上述方法类似,可以存储每个文件。一旦仓库占用的空间超过一定限制,它将进行强制重打包(有一个选项可以设置尝试的难度--window=[N],--depth=[N]),这可能需要数小时。它使用增量和无损压缩的组合来进行重打包(递归增量,然后在拥有的任何位上应用无损压缩)。其他像SVN这样的工具使用简单的增量压缩(据记忆,不可信)。注:增量压缩存储增量变化,而无损压缩几乎就像zip、rar等格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接