Странный конфликт на мерзавце

Я прочитал статью о трехсторонних слияниях (diff3). Это дает пример того, как это обнаруживает конфликт. Пример:

A=[1,4,5,2,3,6]
O=[1,2,3,4,5,6] <<< Origin
B=[1,2,4,5,3,6]

В первый раз он вычисляет разницу между OA и после OB:

A=[1,4,5,2,3,   ,6]
O=[1,   ,2,3,4,5,6] 

а также

O=[1,2,3,4,5, ,6] 
B=[1,2, ,4,5,3,6]

После того, как это делает diff3 parse:

A=[1,4,5,2,   3    ,6]
O=[1,   ,2, 3,4,5  ,6] <<< Origin
B=[1,   ,2, 4,5,3  ,6]

И после этого обнаруживает конфликт:

1
4
5
2
<<<<<<<<<A
3
|||||||O
3
4
5
=======
4
5
3
>>>>>>B
6

Следуя этому методу для обнаружения конфликта, я пробую простой пример: изначально у меня есть документ:

a;
b;

я делаю обновления 1 обновление пользователя "a;", чтобы "a=0;" обновление пользователя 2 "b;", чтобы "b=0;"Я получаю этот результат:

xx
<<<<<<< A
int a=0;
int b;
||||||| O
int a;
int b;
=======
int a;
int b=0;
>>>

Когда я объединяю эти два документа, у меня возникает конфликт, даже если я не изменяюсь в одной позиции (a and b are not at the same position)! кто-нибудь может объяснить мне, почему у меня этот конфликт?

1 ответ

Этот вопрос очень похож на этот, и ответ также таков: это потому, что каждый блок различий состоит не только из буквального различия, но также и из некоторых строк контекста, которые необходимы, чтобы найти разницу в файле, к которому добавлено несколько строк / удален и, таким образом, смещение блока изменяется. Разница в контексте также является конфликтом, потому что в зависимости от того, какой патч вы бы применили первым, вы меняете контекст для другого патча.

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