22

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

3 ответа3

19

Вы можете установить опцию конфигурации 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
7

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

Вы можете определить новые команды 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 для использования с файлами изображений.

-1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .