2012-05-28 139 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等。