Я предполагаю, что мне нужно настроить difftool. Какие difftools работают? Как вы вводите параметры?
3 ответа
Вы можете установить опцию конфигурации 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 для использования с файлами изображений.
Выше приведен исчерпывающий способ сделать это ... однако, если вам просто нужно сделать это для нескольких файлов, я использую следующий метод:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Здесь я использую vimdiff
но вы можете использовать любой другой инструмент. Выше можно также объединить в небольшой скрипт, если вам нужно делать это снова и снова.