画像ファイルをSVNリポジトリに保存したい。私は、SVNが単なるコピーではなく、デルタベースの変更をリポジトリに保存しようとすることを読みました。ただし、別の方法として、画像をbase64に変更し、テキストバージョンで保存することもできます。base64イメージを作成するコストを考慮すると、これはより実用的ですか、それとも事態を悪化させますか?
2 に答える
Gitは差分を保存するためにデルタを使用しません。画像ファイルでは、これはとにかく不可能です。つまり、追跡された画像が変更された場合、リポジトリのサイズはそれ自体のサイズの100%増加します。また、画像はすでに圧縮されているため、gitのパッキングでは圧縮できません。
問題は、画像の大きさと変更の頻度です。これにより、リポジトリがどれだけ速く成長するかを見積もることができます。次に、ユースケースのリポジトリサイズの推奨事項を参照できます。
Git(およびSubversionも)は、リポジトリにファイルを保存するためにデルタを使用します。それらは、GitとSubversionの両方で、バイナリファイルをうまく処理するバイナリデルタです。また、一致するバイトの実行を検出し、改行のような区切り文字に依存しません。
Subversionはファイルの以前のリビジョンに対してデルタを実行しますが、Gitは最初に全文を保存し、gc
操作中にいくつかの可能性のある候補を選択し、デルタを実行するために最も類似したファイルを選択します。これは、変更が部分的または完全に元に戻されたときに、(場合によっては)別々の同様のファイルまたは古いバージョンを利用できることを意味します。Gitは、フルテキストとデルタの両方にデフレート圧縮を適用します(Subversionは適用しません)。
複数のバージョンのファイルのストレージを圧縮する他の汎用的な方法はありません。古いバージョンのファイルを保持する必要がある場合は、Gitが最適です。専用のバックアップシステムと比較した場合の唯一の欠点は、Gitが古いバージョンを削除できないことです。
ほとんどの画像は圧縮されており、通常、違いがある場合はファイルの残りの部分もすべて異なるため、デルタ圧縮からはそれほど得られず、圧縮されても、によって適用される追加の圧縮からはあまり得られません。ギット。ただし、Gitには「クリーン」フィルターと「スマッジ」フィルターを提供するメカニズムがあります。「クリーン」フィルターはファイルをリポジトリに保存する前に適用され、「スマッジ」フィルターはファイルをチェックアウトするときに適用されます。PNGファイルの場合、圧縮せずにファイルを書き換えるためにそれらを使用できます。異なるバージョンで同じである大きな部分が実際に含まれている場合よりも、デルタ圧縮はそれらを利用し、圧縮は後でgitによって適用されるため(同じアルゴリズムを使用)、何も失うことはありません。実際には、多くの画像があり、それらの大部分が実際に同じである場合にのみ、問題を起こす価値があると思います。OpenOfficeドキュメントのような他の収縮したフォーマットにも適用されます。