Почему 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 г.)

коммит 571f434mergetools/xxdiff: предотвратить segfaults от остановки difftool

Подписал: Дэвид Агилар

Пользователи часто используют "git difftool" (мужчина ) ГОЛОВА^" чтобы проверить свою работу и " mergetool.prompt" установлен в falseчтобы difftoolне запрашивает их перед сравнением каждого файла.

Это очень удобно, потому что пользователи могут видеть все свои различия, просматривая окна по одному.

Проблема возникает при обнаружении некоторых двоичных файлов.
Он может вызвать ошибку сегментации и вернуть код выхода 128, который используется в специальном регистре. git-difftool-helperкак чрезвычайная ситуация, прерывающая процесс.

Подавить код выхода из xxdiffв своем diff_cmd()реализация, когда мы видим код выхода 128, так что GIT_EXTERNAL_DIFFцикл продолжается непрерывно до следующего файла, а не прерывается, когда он встречает первый двоичный файл.

Другие вопросы по тегам