10

バージョン管理下に大量のデータ、つまりサイズが約 500Mb の数百のファイルを含むディレクトリ構造 (深さ <=5) を配置します。

私が必要としているのは、私を助けるシステムです: - ファイルが変更されたかどうかを検出するため - ファイルが追加/削除されたかどうかを検出するため - リポジトリ全体を別の場所に複製するため - 「チェックポイント」を保存し、後で復元するため

変更検出にsha1は必要ありません。より高速なものが受け入れられます。

これにはgitの価値がありますか?より良い代替手段はありますか?

4

5 に答える 5

10

「 Git の制限とは」 で述べたように、Git は大きなファイル (または大きなバイナリ ファイル) を管理するようには作られていません。

次のことが必要な場合は、Git が必要です。

  • ファイル内で実際に何が変更されたかがわかります。ただし、ディレクトリレベルでは、他の回答の方が優れています (Unison または rsynch)
  • 開発データとそれらの大きなリソースとの間の近接性 (つまり、「同じ参照」) を維持してください。参照を 1 つだけ持つことは役に立ちますが、それらを効率的に管理するにはgit-bigfilesのような Git のフォークが必要になります。

注: まだ Git を使用している場合は、このアプローチを試すことができます

残念ながら、rsync私たちの目的にも完璧ではありません。

  • まず第一に、これは実際にはバージョン管理システムではありません。ファイルの複数のリビジョンを保存したい場合は、複数のコピーを作成する必要がありますが、これは無駄であり、xdelta面倒な (そして再構築が遅くなる可能性があり、中間バージョンのプルーニングが困難になる可能性があります) か、それらを git にチェックインする必要があります。 、ファイルが大きすぎるため、まだ溶けてしまいます。
  • さらに、rsyncはファイルの名前変更を適切に処理できません-まったく。

さて、別のアイデアはどうですか:ファイルをチャンクに分割し、それらの各ブロックを個別に git にチェックしましょう
そうすれば、git のデルタ圧縮は一度に噛み砕く必要がなくなり、変更されたブロックを送信するだけで済みます...

に基づいておりgzip --rsyncableこの Git リポジトリで POC を利用できます

于 2009-11-19T11:35:16.390 に答える
8

git-annex はこの問題を解決します。大きなファイル データを直接 git に保存するのではなく、キー/値ストアに保存します。キーへのシンボリック リンクは、実際の大きなファイルのプロキシとして git にチェックインされます。

http://git-annex.branchable.com

于 2010-11-18T18:55:45.623 に答える
1

Unison File Synchroniserは、大きなバイナリファイルの複数のコピーを維持するための優れたツールです。チェックポイントの保存以外は、要求されたすべてのことを実行しますが、rsyncハードリンクコピーを使用して実行できます。

于 2009-11-19T10:48:40.693 に答える
1

Unix システムを使用している場合 (git を使用しているため、おそらくそうです):

  • すべての小さなものには git リポジトリを使用してください。
  • 単一の「large_files」フォルダーから大きなファイルをリポジトリ内の適切な場所にシンボリック リンクします。
  • より伝統的な非バージョニング バックアップ システムを使用して large_files フォルダーをバックアップし、それらを他の人に渡す必要がある場合は、それらすべてを時々 zip ファイルにまとめます。

そうすれば、git の利点が得られ、必要なツリー構造を保持でき、サイズの大きなファイルは通常のフォルダー階層内にあるように見えても、別の場所にバックアップされます。

于 2009-11-19T23:52:59.157 に答える
0

たぶん、rsyncのようなものがあなたのニーズに適しています(バックアップが必要な場合、同時実行性、マージ、分岐などは必要ありません)

于 2009-11-19T10:46:18.843 に答える