git check-attr による Git 属性の活用
先日作った Git Companion Scripts を改良しました。
これまでの pre-commit-encoding
スクリプトは、単一のエンコーディング指定をすべてのテキストファイルに一律に適用するものでしたが、これが .gitattributes
の encoding
属性によりファイルごとにエンコーディングを個別指定できるようになりました。
これで利便性がかなり増したと思います。使用法については 先日のブログ記事 を更新していますのでそちらを参照してください。
以下は今回の改良点の解説です。
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