Для того, чтобы различать двоичные файлы в git, я предполагаю, что мне нужно настроить difftool.
Какие difftools работают? Как вы вводите параметры?
Для того, чтобы различать двоичные файлы в git, я предполагаю, что мне нужно настроить difftool.
Какие difftools работают? Как вы вводите параметры?
Ответы:
Вы можете установить 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):
[diff "bin"]
textconv = hexdump -v -C
Ответ Ролана Смита был полезным, но в настоящее время он неполный (см. Комментарии) - здесь есть две части.
Вы можете определить новые команды 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 для использования с файлами изображений.
.gitattributesглобально (чтобы идти вместе с [diff]записями в вашем глобальном .gitconfig). Если вы сделаете .gitattributesлокальный репо, то пользователю придется изменить его .gitconfigнастройки локального репо, потому что по соображениям безопасности они не будут перенесены на удаленный. В любом случае, каждый пользователь должен как-то обновить свои локальные файлы / конфигурацию, чтобы включить это поведение. В .gitconfigпод [core]add attributesfile = c:/users/<username>/.gitattributesили где вы хотите сохранить его, если вы делаете его глобальным (обратите внимание на прямую черту, даже в Windows).
Вышеприведенное является исчерпывающим способом сделать это ... однако, если вам просто нужно сделать это для нескольких файлов, я использую следующий метод:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Здесь я использую, vimdiffно вы можете использовать любой другой инструмент. Выше можно также объединить в небольшой скрипт, если вам нужно делать это снова и снова.