Вопрос: Как я могу разбить двоичные файлы в git?


Я предполагаю, что мне нужно настроить diffftool. Какие дифлауты работают? Как вы вставляете параметры?


19
2018-01-23 20:48


Источник


Какую выходную информацию вы ожидаете получить от инструмента diff двоичного файла? Какой это двоичный файл? Это что-то, что можно отнести к текстовому формату, а затем сравнить? - Zoredache


Ответы:


Вы можете установить 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

14
2018-01-24 10:30



Я мог бы разграничить его в гексагоне. Я был бы достаточно доволен, зная, сколько байтов отличается, или в каких положениях байты отличаются. Я закончил использование Hex Fiend, клонировав свой репозиторий git, чтобы проверить обе версии файла, потому что я не мог понять, как получить git для запуска программы. - Nick Retallack
@NickRetallack: см. Дополнительные примеры. - Roland Smith
Я добавил пример 3 в мою конфигурацию git, но когда я делаю «git diff», он все равно просто дает мне такое же короткое сообщение: «Двоичные файлы a / file и b / file отличаются» - Nick Retallack
Если вы хотите использовать libmagic, вам нужно будет изучить исходный код git, чтобы узнать, работает ли это ... - Roland Smith
Я, наконец, получил это для работы, добавив * .bin diff = bin в мои .gitattributes - Justin Rowe


Ответ Роланда Смита был полезен, но в настоящее время он неполный (см. Комментарии) - это две части.

Вы можете определить новые команды diff в вашем хранилище .git/config файл или ваш личный глобальный ~/.gitconfig файл, например, команду hex diff, используя hexdump:

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

Затем вам нужно использовать репозиторий .gitattributes файл, чтобы сообщить git, какие файлы следует использовать с этой специальной командой diff:

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

Как .gitignore файла, .gitattributes файл должен быть проверен в вашем репозитории.

В моем случае у меня есть несколько разных расширений файлов, которые я хочу рассматривать как двоичные (например, избегаю конверсий, заканчивающих завершение строки, если вы используете git в Windows), а также видите любые различия через hexdump:

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

Смотрите также https://github.com/resin-io/etcher/pull/1367 для другого примера, определяющего команду hexdump diff для использования с файлами изображений.


5
2017-09-18 11:27





Вышесказанное представляет собой комплексные способы сделать это. Однако, если вам просто нужно сделать это для нескольких файлов, я использую следующий метод:

git checkout HEAD -- /path/to/file > ~/file vimdiff ~/file /path/to/file

Здесь я использую vimdiff но вы можете использовать любой другой инструмент. Вышеупомянутое может быть также объединено в небольшой скрипт, если вам нужно делать это снова и снова.


0
2018-06-19 16:43