`git diff --check`のHEAD全体への適用方法とempty treeのハッシュ値

25 views Post
wakairo @wakairo

git diff --checkは、(バイナリファイルを除く)diffの内容にtrailing whitespace等が無いかをチェックできるコマンドです。

チェック対象を通常の差分ではなく、HEADのファイル全体にしたい場合は、以下のように実行します。

git diff --check "$(git hash-object -t tree /dev/null)" HEAD

HEADのファイル全体をチェックする仕組みと「empty treeのハッシュ値」

上述のコマンドでは、「何のファイルもないtreeのハッシュ値」とHEADの間でdiffを取ることで、 diffの結果がHEADのファイルの内容全体となり、それがチェックされるようにしています。

では「何のファイルもないtreeのハッシュ値」つまり「empty treeのハッシュ値」をどう求めれば良いかと言いますと、 git hash-object -t tree /dev/nullとなります

$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904

ちなみに「empty treeのハッシュ値」は、上記のように定数値ではあるのですが、 gitで用いるハッシュの計算方法(アルゴリズムなど)が変わればこの定数値も変わりますので、 定数として持たずgit hash-objectに計算させた方が安全です。

0
Raw
https://www.techtips.page/ja/comments/1176