Для того, чтобы различать двоичные файлы в 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
но вы можете использовать любой другой инструмент. Выше можно также объединить в небольшой скрипт, если вам нужно делать это снова и снова.