Почему BeyondCompare 4 / Git пытается выполнить различие текста в двоичных файлах?
Я пытаюсь объединить ветку с другим.NET .dll
а также .pdb
и git/BC4 пытается объединить текстовые файлы вместо того, чтобы позволить мне выбрать локальный или удаленный.
Я никогда не испытывал этого раньше, возможно, я изменил некоторые настройки, или BC4 имеет некоторую разницу с BC3.
Мой актуальный .gitconfig
[merge]
tool = bec3
renamelimit = 2000
[mergetool]
prompt = false
keepBackup = false
[mergetool "bec3"]
cmd = \"C:/Program Files (x86)/Beyond Compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
trustExitCode = true
Я использую msysgit 1.9.5 и Beyond Compare 4.0.3
Редактировать: я не хочу бинарного слияния, Git просто заставил меня выбрать локальный или удаленный файл для разрешения конфликта. У меня вопрос "это настройка git (если да, что?) Или настройка BC?"
2 ответа
Beyond Compare не поддерживает слияние бинарных файлов. Некоторые системы контроля версий позволяют определять различные инструменты слияния на основе расширения файла, вызывая разные инструменты слияния для двоичных и текстовых файлов. Я не думаю, что Git предоставляет способ сделать это.
Вам придется объединять двоичные файлы за пределами Beyond Compare.
Для разрешения конфликта с версией хранилища.dll-файла:
git checkout --theirs -- file.dll
git add file.dll
git commit
Чтобы разрешить конфликт с вашей версией.dll-файла:
git checkout --ours -- file.dll
git add file.dll
git commit
Я добавлю слияние бинарных файлов в наш список пожеланий для будущей версии Beyond Compare.
Это работает лучше 6 лет спустя: с Git 2.34 (Q4 2021) бэкэнд (в вашем случае «BeyondCompare») может выйти со статусом 128, который
difftool-helper
который запускает бэкенд, воспринимается как существенный сбой, когда он вообще не имеет существенного значения.
Это уже не блокировка.
Здесь «xxdiff» — это
diff
инструмент на ваш выбор (опять же здесь, BeyondCompare)
См. (12 октября 2021 г.) Дэвида Агилара (
davvid
).
(Объединено Junio C Hamano --
gitster
-- в коммите 6a1bb08, 25 октября 2021 г.)
коммит 571f434
mergetools/xxdiff
: предотвратить segfaults от остановки difftoolПодписал: Дэвид Агилар
Пользователи часто используют "
git difftool
" (мужчина ) ГОЛОВА^" чтобы проверить свою работу и "mergetool.prompt
" установлен вfalse
чтобыdifftool
не запрашивает их перед сравнением каждого файла.Это очень удобно, потому что пользователи могут видеть все свои различия, просматривая окна по одному.
Проблема возникает при обнаружении некоторых двоичных файлов.
Он может вызвать ошибку сегментации и вернуть код выхода 128, который используется в специальном регистре.git-difftool-helper
как чрезвычайная ситуация, прерывающая процесс.Подавить код выхода из
xxdiff
в своемdiff_cmd()
реализация, когда мы видим код выхода 128, так чтоGIT_EXTERNAL_DIFF
цикл продолжается непрерывно до следующего файла, а не прерывается, когда он встречает первый двоичный файл.