git check-attr による Git 属性の活用

先日作った Git Companion Scripts を改良しました。

これまでの pre-commit-encoding スクリプトは、単一のエンコーディング指定をすべてのテキストファイルに一律に適用するものでしたが、これが .gitattributesencoding 属性によりファイルごとにエンコーディングを個別指定できるようになりました。

これで利便性がかなり増したと思います。使用法については 先日のブログ記事 を更新していますのでそちらを参照してください。

以下は今回の改良点の解説です。

git check-attr の利用法

Git 属性指定ファイル .gitattributes の解釈は git check-attr というコマンドを使えば簡単にできます。新しい pre-commit-encoding スクリプトがやっているように新しい属性の追加も容易です。

git check-attr コマンドは、問い合わせた属性と各ファイルについて <PATH>: <attribute>: <info> の形式の文字列を返します。

たとえば次のような .gitattributes ファイルがある場合、

*.h encoding
*.c encoding=ascii
mope.* -encoding

各ファイルの encoding 属性について次のように問い合わせることができます。

$ touch hoge.c hoge.h hoge.txt mope.c mope.h mope.txt
$ git check-attr encoding binary *
hoge.c: encoding: ascii
hoge.h: encoding: set
hoge.txt: encoding: unspecified
mope.c: encoding: unset
mope.h: encoding: unset
mope.txt: encoding: unset

詳しくはマニュアル (git help attributes および git help check-attr) を参照してください。 git check-attr は Git のバージョンによって使用可能なオプションの種類が異なりますので注意してください。

pre-commit-encoding での利用法

pre-commit-encoding スクリプトでは、次のようにコミットされるファイルのリストを標準入力から渡してその結果を使っています。

$ git add hoge.*
$ git diff --cached --name-only --diff-filter=ACM | git check-attr --stdin encoding
hoge.c: encoding: ascii
hoge.gif: encoding: unspecified
hoge.h: encoding: set
hoge.txt: encoding: unspecified

(バージョンの古い Git を使っている場合、最初のコミット (root commit) では git diff --cached するとエラーになることに注意してください)

2012/05/10 17:10:00 JST