6

通常は圧縮されたファイルの「非圧縮」バージョンを何らかの方法でリポジトリに保存することは意味がありますか?

もしそうなら、これを実装する標準的な方法はありますか? (おそらく、そのような各ファイルを特別な名前のフォルダーに圧縮解除する標準の pre-commit フックと、そのような特別な名前のフォルダーを、LibreOffice が読み書きできる圧縮ファイルに圧縮する post-checkout フック? プロセスのようなもの? 「アーカイブする前にzipを解凍する必要がありますか?」で説明されていますか?)(おそらく、バージョン管理ソフトウェアのコードをハッキングして、古いバージョンと新しいバージョンを自動的に解凍し、解凍されたファイル間の差分を保存します。大幅な改善を提供するには、元のファイル間の直接差分を保存する元のシステムにフォールバックするか、単にファイルを直接保存しますか?)

頻繁に編集される OpenOffice / LibreOffice ファイルのコレクションがあります。「Should images be stored in a git repository?」で推奨されているように、バージョン管理リポジトリにそれらを保存しています。. たまたま、git ではなく、TortoiseHg または SourceTree を使用してリポジトリにアクセスしています。

Open Office ファイルは、実際には zip 圧縮されたコンテナーであり、内部にいくつかの XML ファイルがあることをたまたま知っています。(他の多くの一般的なアプリケーション「バイナリ ファイル形式」も、何らかの形式の zip 圧縮ファイルであると聞いています)。

私の理解では、そのような「バイナリ」ファイルへの最小の変更でさえ、リポジトリに格納された新しいファイル全体につながるということです。「テキスト」ファイルの小さな変更とは対照的に、変更のみが保存および送信されます。

理論的には、次の利点があります。

  • 変更がほんの数単語である場合、変更ログの「差分」ビューで変更された正確な単語を確認できました。(有益ではない「バイナリファイルが変更されました」というメッセージではなく)。
  • 何人かの異なる人がファイルのバージョン 14 を個別に編集する場合、すべての改良点をバージョン 16 のファイルに回帰することなくマージする方がはるかに簡単です。
  • リモート リポジトリとの同期が高速化されます。(圧縮された) ファイル全体ではなく、短い「変更」のみを送信する必要があります。
  • ディスクスペースの観点から、おそらく小さいリポジトリ-数百の変更の後、これらのファイルの数百の完全なコピーを含む比較的大きなリポジトリではなく、数百の小さな変更のみを含む比較的小さなリポジトリを期待しています。(この利点は最後にリストします。なぜなら、最近の安価なディスク容量にはほとんど関係がないからです)。
4

1 に答える 1

1

通常は圧縮されたファイルの「非圧縮」バージョンを何らかの方法でリポジトリに保存することは意味がありますか?

特に分岐と差分が必要な場合は理にかなっています。

この古いスレッドは状況を要約しています。

  1. サイズが埋め込み画像やその他の大きなオブジェクトによって支配される Openoffice ドキュメントの場合、OO ファイルは各ファイルが個別に圧縮される Zip アーカイブであるため、git デルタ メカニズムはすでに十分に機能しています。
    イメージを変更しない場合、そのイメージは同じ方法で保存されたままになり、デルタを実行できます。
  2. 単純なコンテンツがサイズの大部分を占めるオブジェクト指向ドキュメントの場合、zip 圧縮によって「混合」が発生し、ドキュメントの小さな変更が zip ファイルの非常に大きな変更に変換されるため、git デルタ メカニズムは機能しません。

cleanコミットする前に圧縮解除するフィルターを作成することもできます。ただし、チェックアウト時に使用する補完フィルターに
はトリックがあります。smudge適切に汚さないと、git は常にファイルをインデックスに対して変更されたものとして表示します。
スマッジを正しく行うとは、OO が使用するのとまったく同じ圧縮率と圧縮方法を使用することを意味しますが、これは少し注意が必要です。cleanフェーズとフェーズの両方で zip バイナリを使用しようとしましたが、smudgeうまく機能しません。汚れたファイルは常に元のファイルとは異なります。
何が起こっているのか (libzip) をより細かく制御するために、おそらく下位レベルで作業し、非圧縮ファイルの先頭に圧縮パラメーターを追加して、スマッジ時に復元する必要があります。

ただし、より大きな問題は、大きな OO ファイルを処理する場合、クリーン/スマッジ処理が非常に遅くなる可能性があることです。

于 2013-07-07T09:51:19.680 に答える