2009-08-13 35 views
5

我看到的是善變有效地壓縮在庫中的文件mercurial如何壓縮存儲庫中的文件?

(repo/.hg/store/data) 

有誰知道用什麼樣的壓縮對倉庫裏的文件?

謝謝。

+0

一旦數據被合理有效地壓縮,試圖再次壓縮它通常會導致稍大的文件。 – 2009-08-13 07:17:41

回答

7

Mercurial存儲庫中存在兩個級別的壓縮:增量存儲和zlib compression

另外,各種其他部分也使用壓縮。例如,bundle可以用gzip和bzip2壓縮,就像存檔tarballs一樣 - 但我不認爲你是在要求這些。

+0

可能要注意的是,Mercurial正在將默認壓縮更改爲Zstandard,這在性能和壓縮比方面有了顯着的改進。如果客戶端和服務器都支持,Mercurial 4.1使用zstd進行傳輸,但存儲庫格式尚未更改。 2017-06-16 23:40:10

1

文件的初始版本使用deflate(與zip相同的算法)進行壓縮,但對於更新的文件,Mercurial僅存儲針對先前版本的(二進制)diff。

它也試圖做正確的事情:例如,當縮小的JPEG比原來的尺寸更大時,它不會將其存儲爲「壓縮」。

+4

它實際上做得比這更多一點。如果你只*存儲增量,從revlogs重新生成一個存儲文件的時間隨着變更集的數量而增長(即這是一個O(N)算法)。爲了限制該過程,Mercurial會再次定期存儲整個文件*,並依靠zlib壓縮將其壓縮回合理大小。 – quark 2009-08-18 23:01:11