какая-нибудь документация для написания собственной стратегии git merge? - PullRequest
0 голосов
/ 05 февраля 2019

Существуют определенные типы бинарных файлов, которые я написал для собственного чистого кода.Я попытался добавить свою собственную стратегию слияния, добавив командную строку слияния с драйвером в .gitconfig и добавив выражение файла в .gitattributes, чтобы указать на мою программу слияния.

И это работает - если я делаюgit слиться с этим типом файла, он вызывает мою программу - если я завершаю работу с 1, он терпит неудачу и говорит, что есть конфликт - если 0, он успешно.

ОДНАКО - я не могу найти документацию о том, как он получаетпараметры - т.е. как я знаю, какой файл объединяется - с каким файлом он объединяется и т. д. Они не входят в переменные среды ... Я знаю, что в командной строке драйвера я могу поместить некоторые переменные, но с пробной иошибка, $ PWD - единственное, что мне удалось найти.

Может кто-нибудь указать мне какую-либо документацию о том, как написать собственную стратегию слияния?

1 Ответ

0 голосов
/ 05 февраля 2019

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

стратегии слияния

Я не думаю, что есть какая-либо надлежащая документация.Есть только исходный код.Вы можете получить хороший общий обзор того, как работают стратегии, используя 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.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...