Этот ответ состоит из двух частей, потому что вы описали не стратегию слияния , а скорее драйвер слияния .
стратегии слияния
Я не думаю, что есть какая-либо надлежащая документация.Есть только исходный код.Вы можете получить хороший общий обзор того, как работают стратегии, используя GIT_TRACE
, потому что git merge
вычисляет некоторую информацию, а затем запускает git-merge-recursive
или git-merge-octopus
или любой другой -s <strategy>
, который вы выбрали.Если вы пишете собственную команду git-merge-oakey
и запускаете git merge -s oakey
, вы можете просмотреть аргументы.
Драйверы слияния
Ваш драйвер слияния вызывается способом, описанным в Документация по gitattributes (поиск Определение пользовательского драйвера слияния ).Подстановки %
-характеров будут заполнять различные аргументы.Как говорится, везде, где вы пишете %O
, %A
или %B
, Git заполняет имя временного файла, в котором хранятся данные с соответствующей стадии индекса (скопированной в обычный файл в рабочем процессе).дерево).Вы должны перезаписать файл с именами %A
.
как узнать, какой файл объединяется ...
You don '* знает (и не может сказать), какое имя файла объединяется;от вас ожидают, что вы завершите свою работу, используя только три ввода content .В конечном счете, в любом случае не обязательно одно имя файла: Git, возможно, обнаружил переименование на одной стороне слияния, так что файл с именем foo
в базе слияния и на одной стороне, и bar
наДругая сторона.(Как отметил Hasturkun в комментарии , заполнитель %P
расширится до того имени, которое Git будет использовать в качестве наилучшего предположения для окончательного имени пути. Не используйте это как один из трех входных данныходнако в процессе слияния - три входа находятся в файлах %O
, %A
и %B
.)