私はHDF5で使用されているファイル形式に精通していませんが、HDF5ファイルがgit(またはMercurialやSubversionなど)のリビジョン管理に適しているかどうか疑問に思っていますか?つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?
私はHDF5で使用されているファイル形式に精通していませんが、HDF5ファイルがgit(またはMercurialやSubversionなど)のリビジョン管理に適しているかどうか疑問に思っていますか?つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?
回答:
バージョン管理下に置くデータの種類、データのさまざまなバージョンの保存方法、変更される可能性のあるコンポーネントに関する技術的な詳細をいくつか提供すると、より良い答えが得られますそして、どのコンポーネントがそうではないか、そしてあなたが本当にツリーのような歴史(ブランチ、マージ)を持っているかどうか。
HDF5ファイルは、gitでのdiffベースのバージョン管理には適していません。
gitは内部でハッシュベースのデータベースを使用するため、実際にファイル自体を保存することなくHDF5データファイルのハッシュを保存することが可能です。git-fat、git-annex、およびgit-mediaの 3つのプロジェクトにより、このプロセスが大幅に簡素化されます。明示的にバージョン管理したい、完全に独立した大きなデータチャンクがある場合は、このアプローチを使用することをお勧めします。
データストレージを不揮発性領域と揮発性領域に分離できる場合、バージョン管理データベースとのやり取りの効率が大幅に向上します。gitが提供するDVCS機能が必要ない場合は、データにデータベースを明示的に使用することを検討することもできます。
つまり、HDF5ファイルは行ベースの差分に適していますか、またはgitはHDF5を1つの大きなバイナリとして扱い、各リビジョンのコピー全体を保存する必要がありますか?
この質問に対する文字通りの答えは、gitはHDF5ファイルを効率的に処理しないということです。
いくつかのバイナリファイルがあるプロジェクトのバージョン管理に関するより有用な回答については、このstackoverflowの質問を参照してください:https : //stackoverflow.com/questions/540535/managing-large-binary-files-with-git
他の人が言ったように、正確な技術的なポイントではなく、全体的な目標を説明すれば、役に立つ提案をする方が簡単です。目標に応じて、さらに役立つ提案をもう1つ紹介します。
ActivePapersプロジェクト(http://www.activepapers.org/)は、HDF5の上にコードおよびデータ管理システムを提供します。ActivePaperは、データセットとそれらに作用するコードを含むHDF5ファイルです。メタデータは、どのコードがどのデータセットを計算し、どの入力データを使用するかを追跡します。ソースコードのバージョン管理および/またはHDF5ファイル全体のバージョン管理(別の返信に記載されているgit-annexなどのツールを使用)と組み合わせて、ActivePapersは、孤立したファイルまたはデータセットではなく、計算のバージョン管理に使用できます。
免責事項:私はActivePapersの著者です。