git-fat を使ってみる

git-media の状態がまずかったので、似たようなソリューションを探してみたところ git-fat というものが見つかりました。これは git-media からフォークして作成したもののようです。言語が Ruby から Python へと変化していましたが。
 今回は Windows 環境にてこの git-fat をインストールして動作を確認するところまでやってみます。

インストール

git-fat は Python 2.x 系を必要とするようです。そのためまずは Python をインストールします。今回 Windows のインストーラー付きの Python は 2.7.10 を使用しました。インストールした Python にはパスが通っていることとします。
 その後、コンソールで以下のコマンドで git-fat をインストールすることが出来ます。

既にパッケージ化されているようでインストールは非常に簡単です。

設定

git fat を使用するためには、各リポジトリでの .gitattributes 作成が必要です。

リポジトリに .gitattributes というファイルを作成し、ここにバイナリファイルとして扱う対象とするファイルの拡張子を設定します。以下の例では iso ファイルを git-fat 経由となるように設定しています。

最後に、 .gitfat というファイルを作成します。ここにバイナリファイルをどこに転送するかという情報を記録します。公式ページでの例を引用すると以下のようになっています。

今回の実験では、 D:\temp に配置されるようにしたかったので、以下の内容でファイルを作成しています。また今回はテストのため、匿名の clone を考慮していません。そのため [http] の項目を記載していません。

リポジトリ作成

以下のようにしてリポジトリを作成します。通常の初期化に比べて1手間が増えています。 git fat init は config に fat のためのフィルタ適用のエントリを追加する処理となっています。

使い方

バイナリとして扱うファイル拡張子は iso としたので、まずは適当に iso ファイルを追加してみます。追加の仕方は通常の git 操作と同じ処理で OK です。その後に commit します。これも通常の git 操作と変わりないです。

この状態を git-fat がどう管理しているかを確認してみます。

通常であれば Push をするところですが、巨大ファイル用の相当機能として、git fat push というものがあるようなので実行してみます。これは .gitfat で指定した場所へファイルをアップロードするコマンドとなるようです。

これで指定した場所に、バイナリファイルが転送されました。今回の例だと D:\temp にファイルが生成されました。

別のファイルをさらに追加してみます。

ファイルを削除して、元に戻すコマンドを試してみます。削除はエクスプローラーで削除しました。

結果が何も表示はありませんでしたが、ファイルは正常に復元されました。削除前後で念のため、 SHA1 ハッシュを求めておきましたが、 2 ファイルとも一致しました。

まとめと感想

git-media ほどは情報を出さないようですが、正常に機能していると思います。使い方としては git push する際に、git fat push さえしておけばよさそうです。あとはたまに git fat pull で取得する感じですかね。ただ git-media のほうがバイナリファイルを配置する先の設定が色々と出来るようなので使い勝手がよさそうに見えます。今回は都合よくローカルの別ディレクトリへファイルを配置することが出来てよかったですが、一見出来ないかと思いました。今回の例を見る限りではファイルパスの指定で UNC パスを設定すれば、ファイル共有先に配置することも出来そうです。
 しかし、転送プロトコルは rsync(+ssh) ぽいので、 Linux サーバーだったりすると rync が動いている必要はありそうです。git-media では scp が使えたりとかするみたいだったので、転送に関してはあちらが一歩先の実装をしていますね。

補足

環境変数 GIT_FAT_VERBOSE=1 とすれば、より詳細なログを出力するっぽいです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする