Подтвердить что ты не робот

Зло сливается в git?

"man gitglossary" содержит это определение слияния зла:

Слияние зла - это слияние, которое вводит изменения, которые не появляются в любом родителе.

Я не уверен, что понимаю, к чему стремятся авторы. Почему это зло?

4b9b3361

Ответ 1

Потому что он помещает вещи в код, который никто никогда не просил быть там. Как будто у вас есть этот код:

$foo = bar;
$baz = qxx;

и это изменение:

$foo = bar;
$foo++;
$baz = qxx;

слилось с этим изменением:

$foo = bar;
$foo--;
$baz = qxx;

таким образом, который каким-то образом произвел:

$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;

Ясно, что это зло.

Я бы предположил, что этого достаточно, чтобы быть в man gitglossary, потому что чем больше задействованы ваши алгоритмы слияния, тем более вероятно, что они будут производить такую ​​вещь.

Ответ 2

По словам самого Линуса Торвальдса (взятого из git списка рассылки):

"злое слияние" - это то, что вносит изменения, которые произошли ни от и фактически не разрешают конфликт.

Ответ 3

Я думаю, что это может быть названо "злым слиянием", потому что трудно решить "git вину" при аннотации файла (генерации линейных аннотаций истории).


При создании функции "А" на главной ветке нужно использовать смешение смеха, а на боковой ветке - "В", и эти функции конфликтуют с семантическим (нетекстовым) способом. Пример будет использовать одно и то же имя для глобальной переменной с разными значениями - это требует переименования переменной для одной из функций.

Для слияния "git show --cc" имеет непустой компактный комбинированный diff (но я не уверен, является ли это отношением эквивалентности, импликация может быть только в одном направлении, т.е. "злое слияние", а не пустое "git diff-tree -p --cc" ).

Ответ 4

Стоит упомянуть, что "злое изменение" из "злого слияния" может быть потеряно беззвучно, в то время как перезагрузка "злого слияния", содержащая "злое изменение", которое не противоречит другим совершает. Использование --preserve-merges не помогает в таком случае.