回答
Mercurial存儲庫中存在兩個級別的壓縮:增量存儲和zlib compression。
另外,各種其他部分也使用壓縮。例如,bundle可以用gzip和bzip2壓縮,就像存檔tarballs一樣 - 但我不認爲你是在要求這些。
可能要注意的是,Mercurial正在將默認壓縮更改爲Zstandard,這在性能和壓縮比方面有了顯着的改進。如果客戶端和服務器都支持,Mercurial 4.1使用zstd進行傳輸,但存儲庫格式尚未更改。
文件的初始版本使用deflate(與zip相同的算法)進行壓縮,但對於更新的文件,Mercurial僅存儲針對先前版本的(二進制)diff。
它也試圖做正確的事情:例如,當縮小的JPEG比原來的尺寸更大時,它不會將其存儲爲「壓縮」。
它實際上做得比這更多一點。如果你只*存儲增量,從revlogs重新生成一個存儲文件的時間隨着變更集的數量而增長(即這是一個O(N)算法)。爲了限制該過程,Mercurial會再次定期存儲整個文件*,並依靠zlib壓縮將其壓縮回合理大小。 – quark 2009-08-18 23:01:11
您可能會發現Mercurial作者Matt Mackall's paper上有趣的revlog格式。
- 1. 解壓縮Mercurial存儲庫文件
- 2. 數據庫來存儲壓縮文件
- 3. 如何存儲壓縮文件數據
- 4. 解壓縮Firebase存儲中的文件
- 5. 如何全文索引Mercurial存儲庫?
- 6. 如何在文檔目錄中存儲壓縮文件?
- 7. 如何在Mercurial中克隆存儲庫的子文件夾?
- 8. 如何在內存中解壓縮GZip壓縮文件?
- 9. HTTP壓縮 - 如何發送EAR文件中存在的預壓縮文件?
- 10. 如何從mercurial存儲庫中刪除大文件?
- 11. 如何壓縮文件時不壓縮
- 12. svn存儲壓縮
- 13. 如何壓縮可視化svn服務器存儲庫的文件大小
- 14. 如何使用jszip庫壓縮文件
- 15. 壓縮保存在Google雲端存儲中的文件
- 16. Gradle壓縮包裝:從存儲庫複製Jar文件
- 17. 在提交到存儲庫之前解壓壓縮的數據文件
- 18. 如何在保存前壓縮文件?
- 19. 數據庫存儲IP壓縮
- 20. 壓縮數據如何存儲在緩衝區緩存中,是壓縮的還是未壓縮的?
- 21. 如何將空文件夾提交到Mercurial存儲庫?
- 22. 如何將文件添加到mercurial存儲庫後刪除
- 23. 如何將新文件夾添加到Mercurial存儲庫?
- 24. 如何提交.svn文件夾到Mercurial存儲庫?
- 25. FTP上的Mercurial存儲庫
- 26. 如何清理Mercurial存儲庫?
- 27. 如何保持Mercurial存儲庫小?
- 28. 如何從mercurial存儲庫檢出OpenJDK?
- 29. 如何檢查壓縮文件或壓縮文件是否存在?
- 30. .NET文件壓縮庫
一旦數據被合理有效地壓縮,試圖再次壓縮它通常會導致稍大的文件。 – 2009-08-13 07:17:41