2013年03月21日

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 ユーザーにも使ってもらいやすいコマンドラインツールの開発言語として使いはじめるのはいかがでしょうか?


@methane
klab_gijutsu2 at 21:10│Comments(0)TrackBack(0)

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント