Git: Как добавить настраиваемую стратегию слияния?

Я пытаюсь добавить стратегию слияния, аналогичную той, которая была в этом вопросе: Git Объединить конфликт, чтобы всегда брать новейший файл

Я сохранил script как 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, чтобы убедиться, что это не проблема с поиском script.

Это происходит в двух разных системах: 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