Почему Mercurial не объединит мои XML-файлы с Beyond Compare? - PullRequest
2 голосов
/ 19 августа 2011

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

Я обнаружил, что Mercurial считает, что любой файл с байтом NULL в нем является двоичным, , а некоторые из наших файлов XML кодируются как UTF-16, поэтому содержат много байтов NULL. Мой инструмент слияния по умолчанию - Beyond Compare , который может обрабатывать файлы в кодировке UTF-16. Я настроил Mercurial в соответствии с рекомендациями на веб-сайте Beyond Compare , но во время слияния, Mercurial говорит:

инструмент bcomp не может обрабатывать двоичный файл

Что дает? Почему Mercurial считает, что Beyond Compare не может объединить мой файл?

1 Ответ

5 голосов
/ 19 августа 2011

Рекомендуемая конфигурация Mercurial для использования Beyond Compare в качестве программы слияния выглядит следующим образом:

[merge-tools]
bcomp.executable = C:\Program Files\Beyond Compare 3\BComp.exe
bcomp.args = $local $other $base $output
bcomp.priority = 1
bcomp.premerge = True
bcomp.gui = True

[ui]
merge = bcomp

Согласно Документам Mercurial по инструментам слияния , существует опция binary, которая по умолчанию False. Когда binary=True, он сообщает Mercurial, что инструмент может объединять двоичные файлы. Однако, когда я включаю эту опцию, Mercurial по-прежнему не позволяет Beyond Compare объединять файлы XML.

Немного больше исследований поднимает опцию premerge. Когда premerge=True, Mercurial объединяется внутри сначала и использует инструмент слияния, только если существуют конфликты, которые необходимо разрешить. К сожалению, Mercurial всегда не удается объединить двоичный файл. При сбое предварительного слияния Mercurial останавливает слияние для этого файла и никогда не запускает инструмент слияния.

Казалось бы, решение состоит в том, чтобы также установить для опции premerge значение False. К сожалению, предварительное слияние очень полезно, потому что в 90% случаев нет никаких конфликтов, и вы никогда не увидите свой инструмент слияния. Если для premerge установлено значение False, то при каждом слиянии открывается Beyond Compare. Это становится очень утомительным.

Чтобы решить эту проблему, Я создал вторую конфигурацию инструмента слияния Beyond Compare, которая используется для слияния двоичных файлов . Я установил его приоритет ниже, чем у инструмента bcomp по умолчанию, поэтому он вызывается только при сбое основного инструмента bcomp, который обычно используется только для двоичных файлов. Я добавил эти строки в раздел merge-tools моего файла mercurial.ini:

bcompbin.executable = C:\Program Files (x86)\Beyond Compare 3\BCompare.exe
bcompbin.args = $local $other $base $output
bcompbin.gui = True
bcompbin.premerge = False
bcompbin.binary = True

Одним из побочных эффектов этого является запуск Beyond Compare для слияния двоичных файлов, которые он не может обработать. Я еще не сталкивался с такой ситуацией, поэтому не знаю, как с этим справиться. Я бы, вероятно, просто временно закомментировал мой bcompbin инструмент слияния.

...