3度の飯と最新技術

もう巨大なデータをgitignoreしなくていい! ~git-mediaの使い方~

はじめに

gitはコミットごとにレポジトリ内のファイル全てをスナップショットとして保存するというリッチな 設計になっている。
それがgitの便利さの所以なのだが画像データや音声データのようなバイナリデータを持とうとすると 少しの変更でもそのたびにコピーが生じてファイルサイズ分の容量が増えることになり、あっという間にレポジトリが 肥大化してしまう。
特に学習結果をファイルに保持してテスト等に使いまわすようなプログラムを管理しようとすると アルゴリズムのパラメータを少し変えるたびに100kB近い容量が増えていき、実にイケてない。

普通なら.gitignoreに*.xmlと書いてデータ自体は手動管理したり、シンボリックリンクにして別ディレクトリに置いてそれだけrsyncで同期するようにしたりするんだが 過去の実験時の状態に戻れなかったり、毎回rsyncするのは不便だった。 なんか無いかなーと思ってstack overflowを彷徨ってたらgit-mediaっていうのを見つけたので導入してみた。

このプラグインを使うとgitのコミット/チェックアウトの時にトリガ機能を使ってデータファイルを自動でハッシュに変換して 指定した場所に転送してくれる。
(注:ハッシュ=SHA1を用いて生成した、データに対して一意な40字の文字列)

ファイルのバージョン自体はハッシュで管理されるので昔のものをチェックアウトすれば自動的に古いデータに逆変換されるという仕様である。
便利そうに聞こえるがコマンドや構造の概念が少し複雑で、日本語の解説記事もなかったので入りづらかった。   コードを読んで理解してから使ってみたら実際にはほとんど裏の複雑さを意識する必要はなく、とても使い心地がよかったのでまとめておく。