Git

git diff でバイナリをテキスト化して差分をとる方法


TL;DR


console

$ git config diff.binaryfile.textconv dir

$ echo "*.bin diff=binaryfile" >> .gitattributes


textconvに与えるコマンド

第一引数
にテキスト化したいバイナリのファイルパス

標準出力
にテキスト化された結果

となるようなコマンド。

そもそもバイナリファイルは大きくなりがちなので、全体的に XML とかにシリアライズするととんでもない長さの結果が出てくる。ある程度の構造単位でハッシュをとっていくようなプログラムが良さそうな気がする。


問題点


  • git diff でのみ使われる。(Github ページや、 VSCode の GitHistory では見られない)


  • git diff の際に一時的にコンバートされるにすぎないので、コミットごとに差分が取られるわけではない。もちろんマージもできない。



参考

https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%81%AE%E5%B1%9E%E6%80%A7