Странный конфликт на мерзавце
Я прочитал статью о трехсторонних слияниях (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 ответ
Этот вопрос очень похож на этот, и ответ также таков: это потому, что каждый блок различий состоит не только из буквального различия, но также и из некоторых строк контекста, которые необходимы, чтобы найти разницу в файле, к которому добавлено несколько строк / удален и, таким образом, смещение блока изменяется. Разница в контексте также является конфликтом, потому что в зависимости от того, какой патч вы бы применили первым, вы меняете контекст для другого патча.