Как настроить 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> как изменения, есть ли какой-либо вариант для использования с 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 по умолчанию.

Что бы вы хотели посмотреть? Потому что из того, что я могу понять, конфликт должен иметь место только для последних 3 строк, потому что первые три строки не были изменены ни в одной из двух ветвей, поэтому ...

eftshift0 17.12.2018 20:58

@ eftshift0 Да! Это то, что я ожидал, но на самом деле git определяет только <span> CE </span> как конфликт.

Adilson de Almeida Jr 17.12.2018 21:25

Можете ли вы показать нам (добавить это к вопросу), какой git показывает вам как конфликт?

eftshift0 17.12.2018 21:35

@ eftshift0 Конечно! Добавил файл с конфликтами.

Adilson de Almeida Jr 17.12.2018 22:03

Git понимает, что строки открытия / закрытия <li> </li> одинаковы в обеих ветвях, поэтому он говорит что-то вроде: Хорошо ... эта часть изменений между обеими ветвями одинакова, поэтому не буду жаловаться на это это то, что, я думаю, хотели бы получить разработчики.

eftshift0 17.12.2018 22:05

Правильно @ eftshift0, вот в чем суть, но на самом деле у меня возникает эта проблема с файлами resx, и они редактируются с помощью инструмента, который я могу настроить для редактирования xml таким образом, чтобы избежать этих конфликтов. Итак, вопрос в том, как я могу настроить git для использования какого-то пессимистического алгоритма, который не принимает эти строки (<li>) из разных веток / коммитов как эквивалентные.

Adilson de Almeida Jr 17.12.2018 22:38

Изменение merge.conflictstyle на diff3 вызвало в качестве побочного эффекта работу git, как и ожидалось. Но почему?

Adilson de Almeida Jr 17.12.2018 23:57

Установка для merge.conflictStyle значения diff3 указывает Git записывать базовый текст слияния в рабочее дерево вместе с версиями этапа 2 и этапа 3 внутри области маркера конфликта. Другого эффекта он не имеет, и если вы напишете собственный драйвер слияния, это не имеет значения. Правильный способ сделать это - использовать настраиваемый драйвер слияния, но написать правильный настраиваемый драйвер слияния для XML чрезвычайно сложно.

torek 18.12.2018 00:23

@torek, это то, что после merge.conflictStyle конфликтная область включала <li>, как и ожидалось. Нет абсолютно ничего о том, чтобы писать собственные драйверы слияния или что-то в этом роде.

Adilson de Almeida Jr 18.12.2018 17:25

@AdilsondeAlmeidaJr: Ага, поэкспериментировав, я понял, что вы имеете в виду. Однако в комментариях нет места для форматирования, необходимого для его правильного описания. Думаю добавлю ответ в связанный дубликат.

torek 18.12.2018 19:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
49
0

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