Как настроить git merge/git pull для файлов xml?

У меня следующая ситуация:

Исходный файл test.xml:

<li>
  <span>BA</span>
</li>

Файл с зафиксированными локальными изменениями:

<li>
  <span>BA</span>
</li>
<li>
  <span>CE</span>
</li>

Файл с удаленными изменениями, полученными через git pull:

<li>
  <span>BA</span>
</li>
<li>
  <span>DF</span>
</li>

git pull идентифицирует только строки с новыми <span>s как изменения, есть ли какой-либо вариант для использования с git pull / git merge, который может избежать этой ситуации?

ОБНОВЛЕНИЕ: это файл с обнаруженным конфликтом:

<li>
  <span>BA</span>
</li>
<li>
<<<<<<< HEAD
  <span>CE</span>
=======
  <span>DF</span>
>>>>>>> master
</li>

Пока я ожидал чего-то вроде:

<li>
  <span>BA</span>
</li>
<li>
<<<<<<< HEAD
<li>
  <span>CE</span>
</li>
=======
<li>
  <span>DF</span>
</li>
>>>>>>> master
</li>

Я пробовал использовать аргумент --strategy-option=patience для git pull, но это не дало никакого эффекта.

Это только простой пример. На самом деле эта проблема возникает с файлами .resx, которые редактируются с помощью редактора Visual Studio по умолчанию.


person Adilson de Almeida Jr    schedule 17.12.2018    source источник
comment
Что бы вы хотели посмотреть? Потому что, насколько я могу судить, конфликт должен быть только для последних 3 строк, потому что первые три строки не были изменены ни в одной из двух ветвей, так что.....   -  person eftshift0    schedule 17.12.2018
comment
@efshift0 Да! Это то, что я ожидал, но на самом деле git идентифицирует только ‹span›CE‹/span› как конфликт.   -  person Adilson de Almeida Jr    schedule 17.12.2018
comment
Можете ли вы показать нам (добавить это к вопросу), что git показывает вам как конфликт?   -  person eftshift0    schedule 17.12.2018
comment
@eftshift0 Конечно! Добавил файл с конфликтами.   -  person Adilson de Almeida Jr    schedule 18.12.2018
comment
Git понимает, что строки открытия/закрытия ‹li›‹/li› одинаковы в обеих ветвях, поэтому он говорит что-то вроде: Хорошо... эта часть изменения между обеими ветвями одинакова, поэтому не будет жаловаться на это. это то, что, я думаю, разработчики хотели бы получить.   -  person eftshift0    schedule 18.12.2018
comment
Правильно, @eftshift0, вот в чем дело, но на самом деле у меня возникает эта проблема с файлами resx, и они редактируются с помощью инструмента, который я могу настроить для редактирования xml таким образом, чтобы избежать конфликтов. Итак, дело в том, как я могу настроить git для использования какого-то пессимистического алгоритма, который не предполагает, что эти строки (‹li›) из разных веток/коммитов эквивалентны.   -  person Adilson de Almeida Jr    schedule 18.12.2018
comment
Изменение стиля merge.conflictstyle на diff3 вызвало в качестве побочного эффекта работу git, как и ожидалось. Но почему?   -  person Adilson de Almeida Jr    schedule 18.12.2018
comment
Установка merge.conflictStyle в diff3 указывает Git записать базовый текст слияния в рабочее дерево вместе с версиями этапа 2 и этапа 3 внутри области маркера конфликта. Это не имеет никакого другого эффекта, и если вы пишете собственный драйвер слияния, это не имеет значения. Правильный способ сделать это — использовать пользовательский драйвер слияния, но написать правильный пользовательский драйвер слияния для XML чрезвычайно сложно.   -  person torek    schedule 18.12.2018
comment
@torek, в том-то и дело, что после merge.conflictStyle область конфликта включала <li>, как и ожидалось. Нет абсолютно ничего о написании пользовательских драйверов слияния или что-то в этом роде.   -  person Adilson de Almeida Jr    schedule 18.12.2018
comment
@AdilsondeAlmeidaJr: Ага, после экспериментов я понимаю, что вы имеете в виду. Однако в комментариях нет места для форматирования, необходимого для правильного описания. Я думаю, что добавлю ответ на связанный дубликат.   -  person torek    schedule 18.12.2018