我的問題比標題中聲明的更普遍。版本控制系統如何恢復版本?
我知道源版本控制只存儲有關差異的信息。 據我所知,維基百科也是如此,github也是如此。
但他們都有能力顯示整個文件與特定的修訂。他們是否會逐步將其從第一次修訂恢復到特定版本?
還有一個問題。如果他們僅存儲差異,他們如何在UI中用上下文(在改變之前和之後的一些文本)顯示它們。
編輯: github上存儲整個快照,而不是增量
我的問題比標題中聲明的更普遍。版本控制系統如何恢復版本?
我知道源版本控制只存儲有關差異的信息。 據我所知,維基百科也是如此,github也是如此。
但他們都有能力顯示整個文件與特定的修訂。他們是否會逐步將其從第一次修訂恢復到特定版本?
還有一個問題。如果他們僅存儲差異,他們如何在UI中用上下文(在改變之前和之後的一些文本)顯示它們。
編輯: github上存儲整個快照,而不是增量
我知道源代碼版本控制只存儲不同的信息。
由於問題Git design decision on storing content rather than differences說明,這不正是什麼 Git的一樣。
儘管它具有「打包」格式,但使用LibXDiff庫中的二進制增量以變化形式存儲對象。但主要用於網絡傳輸。
請參閱「Is the git binary diff algorithm (delta storage) standardized?」。
這就是爲什麼當你讀取時git是「resolving delta」。
關於存儲版本控制數據的不同方式的優缺點,我非常推薦閱讀Eric Sink的文章Time and Space Tradeoffs in Version Control Storage。
存儲是版本控制 系統中最困難的挑戰之一。對於每個文件,我們都必須存儲每個有 存在的版本。版本控制庫的邏輯大小從不減少。它只是不斷增長和增長,每個舊版本 需要保持可用。
那麼,什麼是最好的方式來存儲每一個版本的一切?
維基百科,悲哀地......用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等。