Для того, щоб відрізняти бінарні файли в git, я вважаю, що мені потрібно встановити difftool.
Які дифтоолі працюють? Як ви ставите параметри?
Для того, щоб відрізняти бінарні файли в git, я вважаю, що мені потрібно встановити difftool.
Які дифтоолі працюють? Як ви ставите параметри?
Відповіді:
Ви можете встановити textconv
опцію конфігурації для файлового типу. Див. "Виконання текстових відмінностей бінарних файлів" у gitattributes (5) . Що вам слід використовувати, залежить від типу файлу.
Приклад 1 :
Скажімо, ви хочете відрізняти вміст zip-файлів. У цьому випадку слід вказати наступне у файлі $ GIT_DIR / config або $ HOME / .gitconfig.
[diff "zip"]
textconv = unzip -v
Наступного разу, коли ви запитаєте різницю на 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]
Додати" attributesfile = c:/users/<username>/.gitattributes
або де б ви не хотіли зберігати його, якщо ви зробите його глобальним (зверніть увагу на форварші, навіть у windows).
Наведене вище є вичерпними способами зробити це. Однак, якщо вам просто потрібно зробити це для кількох файлів, я використовую наступний метод:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
Тут я використовую, vimdiff
але ви можете використовувати будь-який інший інструмент. Вищезазначене також можна об'єднати в невеликий сценарій, якщо вам потрібно робити це знову і знову.