2014年11月3日月曜日

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っぽく動きます。

0 件のコメント:

コメントを投稿