LINUX.ORG.RU
ФорумTalks

Автоматический мерж пересекающихся коммитов

 ,


0

1

Вопрос не про то, как это где-то уже реализовано, а про то, какой из вариантов вам кажется наиболее удачным.

Пример, исходное состояние:

echo greet
./prog1
./prog2
./prog3

первая ветка от него с таким коммитом:

echo greet
echo test
./prog1
./test
./prog2
./prog3

вторая - с таким

echo greet
echo test
./prog1
./prog2
./test
./prog3

Мержим эти две ветки, что должно в итоге получиться?

Вариант [1] - конфликт

Вариант [2]

echo greet
echo test
./prog1
./test
./prog2
./test
./prog3

Вариант [3]

echo greet
echo test
echo test
./prog1
./test
./prog2
./test
./prog3

Или ещё что-то?

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

Все варианты — хрень, потому что правильное решение сильно зависит от контекста, который находится только в голове разработчика, и не присутствует в патчах.

i-rinat ★★★★★
()

Вариант 4

echo greet
echo test
./prog1
./test
./prog2
./prog3

Или вариант 5

echo greet
echo test
./prog1
./prog2
./test
./prog3

Вообще какие-то алгоритмы продвинутого автоматического мержа уже не актуальны, в общем случае нужно знать семантику, поэтому сейчас самый топовый типа автоматический мерж - от ИИ.

goingUp ★★★★★
()
Ответ на: комментарий от i-rinat

Не, тут «решение» - это не «какой текст должен оказаться в исходнике в итоге», а «какой ответ должна выдать программа, которой сообщили только то, что указано в теме». Я так понимаю, получается она должна выдать конфликт чтобы решал разработчик, имеющий этот самый контекст?

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

Вообще какие-то алгоритмы продвинутого автоматического мержа уже не актуальны

А кто сказал «продвинутого»? Вот есть прога, ей сунули две ветки и хотят от неё ответ в виде смерженного результата. Продвинутая она или нет, но что-то она ответить должна. Если что, даже сегфолт тоже будет ответом, но, думаю, сегфолт тут всё-таки неуместен. Вопрос именно в том, что должна ответить прога чтобы с ней было в итоге максимально удобно работать.

сейчас самый топовый типа автоматический мерж - от ИИ.

Т.е. твой ответ - автоматически применить к исходникам LLM для получения ответа?

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

автоматически применить к исходникам LLM для получения ответа?

Ну да, и тогда можно будет получить любой из предложенных вариантов и даже больше.

ya-betmen ★★★★★
()
Ответ на: комментарий от Psilocybe

Всмысле селективный? Это просто строчка в коде, что за ней скрывается нам не сказали. Там могла быть любая другая строчка.

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

получается она должна выдать конфликт чтобы решал разработчик, имеющий этот самый контекст?

Да. Когда патчи конфликтуют, нужно звать человека.

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

i-rinat ★★★★★
()
Ответ на: комментарий от firkax

А кто сказал «продвинутого»?

Ну значит я неправильно понял твой вопрос, и, наверное, до сих пор не понимаю, лол)

Продвинутая она или нет, но что-то она ответить должна.

«Обычные» мержилки из IDE например выдают или вариант 1, конфликт, поскольку были затронуты близко стоящие строки, что правильно, но трудоемко, или вариант 2, что неправильно, если я правильно понял семантику изменения.

какой из вариантов вам кажется наиболее удачным.

Я привел «удачные» варианты, но их может сделать только человек или LLM.

Т.е. твой ответ - автоматически применить к исходникам LLM для получения ответа?

Мой ответ, что такое уже применяется, но ты, наверное, не в курсе)

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

Я привел «удачные» варианты,

Удачные это 4 и 5? Я думал ты их просто для примера привёл, что можно и так. Ну, я бы не сказал что они удачные, это ж просто игнор одного из коммитов. Хотя, можно предположить что тот, кто запустил мерж, сделал это случайно, не посмотрев что на самом деле один из коммитов не нужен, такое тоже может быть, я как-то про это не подумал. Сам думал про ситуацию когда оба коммита (оба запуска ./test в двух разных местах) действительно нужны.

но их может сделать только человек или LLM.

Ну, «человек» - это вариант [1] (конфликт), «LLM» это ещё один вариант который я не перечислил. А какой лучше? Хотя их можно объединить - указать где случился конфликт, а рядом предложить вариант от LLM на ревью.

Мой ответ, что такое уже применяется, но ты, наверное, не в курсе)

Я ж в самом первом предложении темы написал, что наличие или отсутствие каких бы то ни было реализаций к ней не относится. Но вообще, касательно реализаций, я посмотрел как это делает гит с дефолтными настройками - оказался вариант [2], причём совершенно без каких-либо предупреждений о случившемся, т.е. как будто это штатная ситуация. Был удивлён.

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

Сам думал про ситуацию когда оба коммита (оба запуска ./test в двух разных местах) действительно нужны.

Я думал ты наоборот приводишь ситуацию, с которой стандартный мерж не справляется.

А какой лучше?

Лучше, конечно, человек, если этот человек не ты)

Хотя их можно объединить - указать где случился конфликт, а рядом предложить вариант от LLM на ревью.

Ну примерно так.

goingUp ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)