2012-05-28 98 views
6

我的问题比标题中声明的更普遍。版本控制系统如何恢复版本?

我知道源版本控制只存储有关差异的信息。 据我所知,维基百科也是如此,github也是如此。

但他们都有能力显示整个文件与特定的修订。他们是否会逐步将其从第一次修订恢复到特定版本?

还有一个问题。如果他们仅存储差异,他们如何在UI中用上下文(在改变之前和之后的一些文本)显示它们。

编辑: github上存储整个快照,而不是增量

回答

4

关于存储版本控制数据的不同方式的优缺点,我非常推荐阅读Eric Sink的文章Time and Space Tradeoffs in Version Control Storage

存储是版本控制 系统中最困难的挑战之一。对于每个文件,我们都必须存储每个有 存在的版本。版本控制库的逻辑大小从不减少。它只是不断增长和增长,每个旧版本 需要保持可用。

那么,什么是最好的方式来存储每一个版本的一切?

3

维基百科,悲哀地......用XML(?)以文本形式保存数据库中的每一个修订版本。

看看wikipedia database schema。特别是最近的变化和文字。

因此,他们对“生物学”页面的第一个副本有精彩的O(1)查找。这有不幸的副作用,导致维基百科的technology cost从2010 - 2011年的800万美元膨胀到2011 - 2012年的1200万美元。这是尽管硬盘(和其他)变得更便宜,而不是更昂贵。

对于保存每个文件的修订控制如此之多。 Git采取一个可爱的方法。请参阅Is the git storage model wasteful?

它存储每个文件,类似于上述方法。一旦回购所用的空间超过了一定限度,它就会重新进行蛮力重组(这是一个可以花费很多时间设置难度的选项--window = [N],--depth = [N])。它使用增量和无损压缩相结合的方式进行重新包装(递归增量,然后在任何位上应用无损)。

其他像SVN一样使用简单的增量压缩。 (来自记忆,你不应该信任)。

脚注: 增量压缩存储增量更改。 无损压缩非常类似于zip,rar等。