2009-08-13 4 views
5

私は誰もがリポジトリファイルに使用される圧縮の種類を知っているかMercurialが効率的にリポジトリ水銀はどのようにリポジトリ内のファイルを圧縮しますか?

(repo/.hg/store/data) 

にファイルを圧縮することを見ていますか?

ありがとうございました。

+0

データが合理的に効率的に圧縮されると、それを再度圧縮しようとすると通常はファイルが少し大きくなります。 –

答えて

7

Mercurialリポジトリにはデルタストレージとzlib compressionの2つのレベルの圧縮があります。

さらに、他のさまざまな部分も圧縮を採用しています。例えば、バンドルはtarballをアーカイブすることができるように、gzipとbzip2の両方で圧縮できますが、あなたがこれらを求めているとは思わないでしょう。

+0

Mercurialがデフォルトの圧縮をZstandardに変更しているため、パフォーマンスと圧縮率が大幅に向上しています。 Mercurial 4.1は、クライアントとサーバの両方がサポートしていればzstdを使用していますが、リポジトリ形式はまだ変更されていません。

1

ファイルの初期バージョンはdeflate(zipと同じアルゴリズム)を使用して圧縮されますが、更新されたファイルの場合、Mercurialは以前のバージョンに対して差分(バイナリ)のみを保存します。

正しいことをやろうとします。収縮したJPEGが元のサイズよりも大きくなった場合、「圧縮」などは保存されません。

+4

実際にはそれ以上のことがあります。デルタを* only *格納すると、revlogから格納されたファイルを再生成する時間は、チェンジセットの数(つまりこれはO(N)アルゴリズム)の関数として増加します。そのプロセスを縛るために、Mercurialはファイル*全体を定期的に保存し、zlibの圧縮を利用して妥当なサイズに戻します。 – quark

関連する問題