Какой вывод вы ожидаете получить из инструмента сравнения двоичного файла? Что это за бинарный файл? Это что-то, что можно отобразить в текстовом формате и затем сравнить?
Зоредаче
Ответы:
22
Вы можете установить textconvопцию конфигурации для типа файла. Смотрите раздел «Выполнение текстовых различий двоичных файлов» в gitattributes (5) . Что вы должны использовать, зависит от типа файла.
Пример 1 :
Скажем, вы хотите различить содержимое zip-файлов. В этом случае вы должны поместить следующее в файл $ GIT_DIR / config или $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
В следующий раз, когда вы запросите diff для zip-файла в репо, он вызовет unzip -vобе версии и передаст полученный текст.
Пример 2 :
Для PDF-файлов вы можете использовать, например pdfinfo;
[diff "pdf"]
textconv = pdfinfo
Пример 3 :
Если для типа файла нет специальной утилиты информации, вы можете, например, использовать hexdump(поставляется с FreeBSD и OSX, также доступны в Linux):
Я мог бы изменить это в шестнадцатеричном виде. Я был бы достаточно счастлив, просто зная, сколько байтов отличается, или в каких позициях байты различаются. В итоге я использовал Hex Fiend, клонировав свой git-репозиторий, чтобы я мог проверить обе версии файла, потому что я не мог понять, как получить git для запуска программы.
Ник Реталлак
@NickRetallack: см. Добавленные примеры.
Роланд Смит
2
Я добавил Пример 3 в мой git config, но когда я делаю «git diff», он все равно просто выдает мне то же короткое сообщение: «Двоичные файлы a / file и b / file отличаются»
Ник Retallack
1
Если вы хотите использовать libmagic, вам придется заглянуть в исходный код git, чтобы убедиться, что это работает ...
Роланд Смит
5
Я наконец-то заставил это работать, после добавления * .bin diff = bin к моим .gitattributes
Джастин Роу
11
Ответ Ролана Смита был полезным, но в настоящее время он неполный (см. Комментарии) - здесь есть две части.
Вы можете определить новые команды diff в .git/configфайле вашего репозитория или в вашем личном глобальном ~/.gitconfigфайле, например, команду hex diff, используя hexdump:
Далее вам нужно использовать .gitattributesфайл репозитория, чтобы сообщить git, какие файлы следует использовать с этой специальной командой diff:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
Как и .gitignoreфайл, .gitattributesфайл должен быть проверен в вашем хранилище.
В моем случае у меня есть несколько различных расширений файлов, которые я хочу рассматривать как двоичные (например, избегать любых преобразований с окончанием строки при использовании git в Windows), а также вижу любые различия через hexdump:
Вы также можете установить .gitattributesглобально (чтобы идти вместе с [diff]записями в вашем глобальном .gitconfig). Если вы сделаете .gitattributesлокальный репо, то пользователю придется изменить его .gitconfigнастройки локального репо, потому что по соображениям безопасности они не будут перенесены на удаленный. В любом случае, каждый пользователь должен как-то обновить свои локальные файлы / конфигурацию, чтобы включить это поведение. В .gitconfigпод [core]add attributesfile = c:/users/<username>/.gitattributesили где вы хотите сохранить его, если вы делаете его глобальным (обратите внимание на прямую черту, даже в Windows).
LightCC
10
Если вы хотите, чтобы git отображал diff для двоичных файлов в виде простого параметра diff, используйте следующую команду --text:
Вышеприведенное является исчерпывающим способом сделать это ... однако, если вам просто нужно сделать это для нескольких файлов, я использую следующий метод:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Здесь я использую, vimdiffно вы можете использовать любой другой инструмент. Выше можно также объединить в небольшой скрипт, если вам нужно делать это снова и снова.
Ответы:
Вы можете установить
textconv
опцию конфигурации для типа файла. Смотрите раздел «Выполнение текстовых различий двоичных файлов» в gitattributes (5) . Что вы должны использовать, зависит от типа файла.Пример 1 :
Скажем, вы хотите различить содержимое zip-файлов. В этом случае вы должны поместить следующее в файл $ GIT_DIR / config или $ HOME / .gitconfig.
В следующий раз, когда вы запросите diff для zip-файла в репо, он вызовет
unzip -v
обе версии и передаст полученный текст.Пример 2 :
Для PDF-файлов вы можете использовать, например
pdfinfo
;Пример 3 :
Если для типа файла нет специальной утилиты информации, вы можете, например, использовать
hexdump
(поставляется с FreeBSD и OSX, также доступны в Linux):источник
Ответ Ролана Смита был полезным, но в настоящее время он неполный (см. Комментарии) - здесь есть две части.
Вы можете определить новые команды diff в
.git/config
файле вашего репозитория или в вашем личном глобальном~/.gitconfig
файле, например, команду hex diff, используяhexdump
:Далее вам нужно использовать
.gitattributes
файл репозитория, чтобы сообщить git, какие файлы следует использовать с этой специальной командой diff:Как и
.gitignore
файл,.gitattributes
файл должен быть проверен в вашем хранилище.В моем случае у меня есть несколько различных расширений файлов, которые я хочу рассматривать как двоичные (например, избегать любых преобразований с окончанием строки при использовании git в Windows), а также вижу любые различия через
hexdump
:https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
См. Также https://github.com/resin-io/etcher/pull/1367 для другого примера определения команды hexdump diff для использования с файлами изображений.
источник
.gitattributes
глобально (чтобы идти вместе с[diff]
записями в вашем глобальном.gitconfig
). Если вы сделаете.gitattributes
локальный репо, то пользователю придется изменить его.gitconfig
настройки локального репо, потому что по соображениям безопасности они не будут перенесены на удаленный. В любом случае, каждый пользователь должен как-то обновить свои локальные файлы / конфигурацию, чтобы включить это поведение. В.gitconfig
под[core]
addattributesfile = c:/users/<username>/.gitattributes
или где вы хотите сохранить его, если вы делаете его глобальным (обратите внимание на прямую черту, даже в Windows).Если вы хотите, чтобы git отображал diff для двоичных файлов в виде простого параметра diff, используйте следующую команду
--text
:источник
Вышеприведенное является исчерпывающим способом сделать это ... однако, если вам просто нужно сделать это для нескольких файлов, я использую следующий метод:
Здесь я использую,
vimdiff
но вы можете использовать любой другой инструмент. Выше можно также объединить в небольшой скрипт, если вам нужно делать это снова и снова.источник