gitでバイナリファイルの差分を出力したいときはgit diff --binary
を使いましょうって話。
「コミットすればいいじゃん」ってゆうツッコミは置いといて。
他の人と一時的な差分を共有するとき、git diff > hoge.diff
とかやってパッチを渡すことがある。
そんなとき、バイナリファイルに差分があったらどうするか。
「このパッチをあてて、このバイナリファイルをここに置いて、それからこうやってビルドしてください。」ってのはちょっと残念。
git diff
はデフォルトでバイナリ差分を省略するので、--binary
オプションの出番。
ちなみにテキストファイルの差分もちゃんと一緒に出力してくれる。このオプションは例えばgit show
などでも使える。
適用するときは特にオプションは不要でgit apply
でバイナリも変更してくれる。
ただ一点注意。もしパッチを渡す相手が昔ながらのpatchコマンドを使っていた場合、binary差分は完璧に無視する上にpatchコマンドは成功したことになる。
「git applyしてください」の一言とともにバイナリパッチを渡せば余計なトラブルを回避できる。
git diff
diff --git a/hoge.tgz b/hoge.tgz
index 02ba93c..d0ce544 100644
Binary files a/hoge.tgz and b/hoge.tgz differ
git diff --binary
diff --git a/hoge.tgz b/hoge.tgz
index 02ba93ce61277f57c93dc3c9edd7e8152fc75333..d0ce544c18d7c418929cf19fdf80b689c4d1d17b 100644
GIT binary patch
delta 13
UcmeBW>}6z?@8)2*GLf|d02mSj#sB~S
delta 13
UcmeBW>}6z?@8)1wIgzyk02gKhn*aa+
#どうやってテキストに変換してるんだろう?base64じゃないみたいだけど、独自フォーマットかな?