gitのバイナリ差分

先日あるところからバイナリファイルの差分をもらいました。
差分ファイルの中身を見ると以下のような感じのデータが含まれています。

diff --git a/test1/test2/test.bin b/test1/test2/test.bin
new file mode 100644
index 0000000000000000000000000000000000000000..<ハッシュ値>
GIT binary patch
literal <数値>
<複数行のバイナリファイルのデータ>

literal 0
HcmV?d00001

バージョン管理にgitを使っていないのでどうしたものかと調べいき、

$ git apply < <差分ファイル>

をローカルで実行すればいいことに行き着きました。
今回はたまたま新規ファイルだったので、一行目を

diff --git a/test.bin b/test.bin

に変更して空のディレクトリで先のコマンドを実行すると
そのディレクトリに”test.bin”が現れました。
なお、差分ファイルは”HcmV?d00001″の次にある空行も意味があるみたいです。
ないと

error: corrupt binary patch at line <行数>: HcmV?d00001

とかいって怒られます。

ついでですが、パッチを作るには

$ git diff --binary p<元のファイル> <変更したファイル> > <差分ファイル>

とすればバージョン管理関係なく汎用ツールとして使えます。
“–binary”を外せば普通のdiffっぽく動きます。