gitでバイナリファイルを気軽に扱えるフィルターを作りました
ネイティブアプリの開発とかしてると、ついつい git にスプライトの png とか一緒にコミットしてしまって、気づいたらリポジトリサイズが 1GB 超えてたとかありますよね。
git annex とか、本格的なアセット管理システムとか使えば良いんだけど、普通のgitコマンド覚えるだけでいっぱいいっぱいな人にさらに他のツールまで覚えてもらうのは大変です。
そこで、登録しておいた拡張子のファイルはハッシュ値だけをリポジトリに格納し、ファイルの内容は別のディレクトリやAmazon S3に格納する git-largefile/gits3 を作りました。
git-largefile/gits3 は git の filter として動きます。 filter は通常改行コードの変換をしたり $Id$ のようなキーワードを変換したり行末のスペースを消す、文字通りフィルターなのですが、ここでファイル本体からハッシュ値へ、ハッシュ値からファイル本体への変換をしてしまいます。
これで、事前に設定ファイルと実行バイナリを配置しておいてもらうだけで、新しいコマンドを覚えることなく、 SourceTree for Windows などの GUI ツールもそのまま使いながら、リポジトリサイズの爆発を抑えることができます。
それ、 Go でできるよ!
gits3 は Python でプロトタイプを作った後、 go で作りなおしました。
Go はシステムコールを発行する所がアセンブラで書かれていて、 libc にすら依存しない静的リンクされた実行ファイルが作れますし、クロスコンパイルも簡単です。msvcrt のバージョンとかでハマることもありませんし、 cygwin 上でシェルスクリプトや Perl スクリプト動かすのに比べて起動速度も早いです。
Go に興味はあるけど Go のメリットが活かせるアプリを開発する機会がなくて、、、という方は、 Windows ユーザーにも使ってもらいやすいコマンドラインツールの開発言語として使いはじめるのはいかがでしょうか?