web-dev-qa-db-ja.com

どうすればgitでバイナリファイルを比較できますか?

Gitでバイナリファイルを比較するには、difftoolを設定する必要があると思います。

どのdifftoolsが機能しますか?パラメータをどのように配置しますか?

29
Nick Retallack

ファイルタイプにtextconv configオプションを設定できます。 gitattributes(5) の「バイナリファイルのテキスト差分の実行」を参照してください。何を使用するかは、ファイルタイプによって異なります。

例1

Zipファイルの内容を比較したいとします。その場合は、$ GIT_DIR/configファイルまたは$ HOME/.gitconfigのいずれかに以下を配置する必要があります。

[diff "Zip"]
    textconv = unzip -v

次にリポジトリのZipファイルの差分を要求すると、両方のバージョンでunzip -vが呼び出され、結果のテキストが差分されます。

例2

PDFファイルの場合、たとえばpdfinfo;

[diff "pdf"]
    textconv = pdfinfo

例3

ファイルタイプに特定の情報ユーティリティがない場合は、たとえば、 hexdumpを使用(FreeBSDおよびOSXに付属、Linuxでも使用可能):

[diff "bin"]
    textconv = hexdump -v -C
23
Roland Smith

Gitにバイナリファイルのdiffをプレーンテキストのdiffとして表示させる場合は、次のように--textオプションを使用します。

git diff --text
14
chestozo

Roland Smithからの回答は役に立ちましたが、現在は不完全です(コメントを参照)-これには2つの部分があります。

リポジトリの.git/configファイルまたは個人のグローバル~/.gitconfigファイルで新しいdiffコマンドを定義できます。たとえば、hexdumpを使用したhex diffコマンド:

[diff "hex"]
    textconv = hexdump -v -C
    binary = true

次に、リポジトリの.gitattributesファイルを使用して、この特別なdiffコマンドで使用するファイルをgitに指示する必要があります。

# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex

.gitignoreファイルと同様に、.gitattributesファイルをリポジトリにチェックインする必要があります。

私の場合、バイナリとして扱いたいいくつかの異なるファイル拡張子があり(たとえば、Windowsでgitを使用している場合は、改行変換を避けます)、hexdumpを使用して違いを確認します。

https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d

画像ファイルで使用するためのhexdump diffコマンドを定義する別の例については、 https://github.com/resin-io/etcher/pull/1367 も参照してください。

11
peterjc