我不明白爲什麼與大文件的小差異導致我的Subversion存儲庫增長如此之多。Inexplicable SVN存儲庫大小從小的差異增加到大的文件
我有一個zip文件的內容數據庫使用的一些測試。我想將每個新版本的測試數據存儲在我們的Subversion存儲庫中。
我已經做了一些實驗,檢查data.zip的最後幾個版本並查看存儲庫大小會發生什麼變化。未壓縮的數據大約是150MB,壓縮後壓縮到大約50MB。每個新版本的data.zip文件都被檢入到版本庫中,這使版本庫的大小增加了大約50MB。我認爲它應該只會增加一個我預計會少得多的三角洲。
Subversion使用xdelta存儲壓縮的差異數據。我試圖確認SVN可以做得更好的是下載xdelta並檢查兩個版本之間沒有太大的區別。確實
xdelta3.0z.x86-64.exe -e -s v1_path\data.zip v2_path\data.zip v1v2_delta.file
產生了一個大約3MB的v1v2_delta.file。
我看着SVN存儲庫中的[myrepo] \ DB \轉速,可以看到大文件的每個新修訂
02/08/2011 11:12 57,853,082 4189
02/08/2011 11:40 51,713,289 4190
02/08/2011 11:46 52,286,060 4191
(4189的,4190和4191是文件的名稱。)
我甚至試過壓縮data.zip而不壓縮。這對SVN的商店沒有什麼影響 - 從它的角度來看,我的猜測是它爲每個版本存儲了整個data.zip的壓縮副本,而不僅僅是第一個。我使用FSFS後端運行SVN 1.6。
關於提交二進制文件以及SVN如何存儲增量的其他各種好的計算器答案,例如SVN performance after many revisions。但是我不明白爲什麼三角洲沒有存儲在上述情況下 - 即。如果xdelta可以獨立運行這樣一個小差異,SVN肯定也可以 - 或者選擇不??
編輯:我也嘗試了tar(未壓縮)的文件,SVN不再有效地存儲它們。此外,我發現我們在SVN 剛剛存儲差異的另一個存儲庫中有一個相同數據格式的zip文件(雖然小得多)。
因此,這個問題的概括版本是:SVN可以有效地存儲二進制文件,例如, 10 slightly different CAD files are just 1.2 times the size of 1。 SVN甚至可以通過壓縮zip文件來節省空間。但顯然它並不總是節省空間的二進制文件 - 在什麼情況下是這種情況?
關於「避免存儲二進制文件」。在Windows上,這是不可避免的,特別是如果存儲修改遊戲編輯器工件或基於辦公室的文檔。 「避免存儲容易再生的二進制文件」更爲合適。 svn可以使用二進制增量的事實將它與其他所有可用的源代碼控制系統區別開來,因爲其他所有的代碼都無法做到這一點 - 它們都會重新提交新鮮的二進制文件,這會導致文件的最終大小存儲。 – 2012-01-24 19:32:11