git: Как добавить собственную стратегию слияния?
Я пытаюсь добавить пользовательскую стратегию слияния, аналогичную приведенной в этом вопросе: конфликт Git слияния, чтобы всегда принимать новейший файл
Я сохранил сценарий как git-merge-latest.sh
и добавил следующие строки в .git/config
:
[merge "latest"]
name = select latest file merge driver
driver = git-merge-latest.sh %O %A %B
Тем не менее, когда я бегу git pull --strategy latest
Я получаю сообщение:
Could not find merge strategy 'latest'.
Available strategies are: octopus ours recursive resolve subtree.
Я пытался проверить git config merge.latest.driver
, который возвращает ожидаемый результат. Я также изменил значение driver
в true
просто чтобы убедиться, что это не проблема с поиском сценария.
Это происходит на двух разных системах под управлением git 1.8.2.2 и 1.7.9.5. Что я делаю неправильно?
1 ответ
В этом случае вы не настроили стратегию слияния, вы настроили драйвер слияния:
Стратегия слияния - это программа, которая определяет способ объединения двух (или более) коммитов. По умолчанию, git merge
использует "рекурсивную" стратегию, найденную в программе git-merge-recursive
, Указав --strategy <strategy>
флаг для git-merge
(или же git-pull
) вы говорите, чтобы вызвать другую стратегию. Если вы хотите подключить свою собственную стратегию слияния, вы можете, создав исполняемый файл git-merge-mystrategy
на вашем пути и работает git merge --strategy mystrategy
,
Это отличается от драйвера слияния. Драйвер слияния - это механизм, используемый для разрешения конфликта в файле, который существует при слиянии двух коммитов. Вы подключаете свой собственный драйвер слияния так, как вы описали, настраивая merge.mydriver.driver
установка.
Чтобы включить драйвер слияния для определенного файла, необходимо настроить драйвер для этого файла в .gitattributes
:
filename merge=mydriver