LINUX.ORG.RU

Найти конфликтующие ветки в Git при слиянии

 , , ,


0

1

Допустим есть ветка ветка A.
От неё сделано N веток X01, X02, ..., X99.
В каждой ветке Xnn внесены какие-то изменения, ветка A не изменяется.
Ветки Xnn последовательно обратно сливаются в A:
git checkout A
git merge X01
git merge X02
...
git merge Xnn

При слиянии очередной ветки происходит конфликт слияние между A и Xnn (допустим X50)
Т.к. ветка A не изменялась, то вливаемая ветка конфилктует с уже слитой.
Т.е. конфликтуют какие-то ветки Xkk и Xtt

Вопрос: Как, в данной схеме, узнать в каких Xnn ветках содержаться конфликтующие изменения?

Все сребазировать с мастером для начала. А потом последовательно сливать одну в другую.

nikolnik ★★★
()

Сразу нужно отметить, что слияние в гите основывается на эвристическом анализе и настраивается огромнейшим количеством опций. Одни и те же ветки при разных настройках могут как слиться автоматически, так и показать совершенно непредсказуемое количество конфликтов. Не fast-forward ветки конфликтуют всегда и даже когда гит автоматически что-то там насливал, то результат может оказаться нерабочим. Допустим, кто-то удалил переменную в заголовочнике в одной ветке, а в другой ветке она продолжилась использоваться в другом файле, конфликта на уровне файлов нет, но между ревизиями есть и результат не скомпилируется.

Самый строгий уровень конфликта конечно же fast-forward, когда все ветки X01..Xnn наследуются друг от друга и задача цикла просто найти в каком порядке и в таком же влить их в A. Если разработчики независимые, то можно приблизительно обнаружить кто конфликтует больше.

Допустим, пробежаться по веткам и влить все, в которых гит сам смог разрешить конфликты, будем считать их счастливчиками. Для каждой из оставшихся делается цикл, в котором она последовательно пытается слиться с каждым из счастливчиков, пока не найдётся неразрешимый конфликт. В итоге получится набор конфликтующих пар.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Спасибо за развернутый ответ!

кто-то удалил переменную в заголовочнике в одной ветке, а в другой ветке она продолжилась использоваться в другом файле

Хороший пример.
Но я честно говоря с таким не сталкивался, думаю что это всё-таки редкий случай. (ну или пока что не мой)

последовательно пытается слиться с каждым из счастливчиков, пока не найдётся неразрешимый конфликт.

Да. Тоже пришел к такому выводу.
Что самый реальный вариант это пытаться выполнять слияния со всеми и определять конфликты.

pru-mike ★★
() автор топика
Ответ на: комментарий от nikolnik

Не совсем понимаю как это поможет определить конфликтующие ветки

pru-mike ★★
() автор топика

Топорно

Начинаешь с Х01 и мержишь в неё Х02-Хнн (отменяя каждый мерж). Повторяешь с Х02 и Х03-Хнн. И так до Хнн-1. Все конфликтные случаи запоминаешь. Так как все ветки имеют общее начала от мастера то мержконфлиты по идее должны совпасть как при мерже в мастер.

DukeNukem
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.