Я видел много сообщений в блогах и сообщений о переполнении стека, в которых говорится, что git config --global diff.algorithm patience
позволит как различиям, так и слияниям использовать вариант стратегии терпения с рекурсивным алгоритмом по умолчанию.
Я обнаружил, что это не так, и я представляю следующую демонстрацию, чтобы показать, почему нет.
git config --global diff.algorithm patience //mythical config statement
git clone https://github.com/kjlubick/PracticingGit.git
cd PracticingGit
git checkout origin/patience-merge-1 -t
git checkout -b merge_test //temp branch for merging
git diff origin/patience-merge-2
Этот diff (изображение предоставлено meld выглядит неплохо. Давайте попробуем его объединить.
git merge origin/patience-merge-2
Хм? Это слияние выглядит некрасиво. Несмотря на то, что строки 9-19 на самом деле не меняются, они помечаются как конфликтующие/измененные совершенно иначе, чем в diff.
Если мы заставим слияние использовать опцию стратегии терпения:
git merge --abort
git merge origin/patience-merge-2 -X patience
Это намного лучше. Конфликты совпадают с различиями, которые мы сделали ранее, и семантически корректны.
Как сделать так, чтобы слияние действительно использовало настройку терпения, а не только различия?
Дополнительные снимки в темноте пробовал (безуспешно):
git config --global merge.algorithm patience
git config --global merge.diff.algorithm patience
Информация о системе:
Windows 8.1
git версии 1.8.4.msysgit.0 (на GitHub для Windows 2.0)
-s
сказано следующее:Use the given merge strategy; can be supplied more than once to specify them in the order they should be tried. If there is no -s option, a built-in list of strategies is used instead (git merge-recursive when merging a single head, git merge-octopus otherwise).
Похоже, сделать это поведением по умолчанию вряд ли возможно. - person Chris Hayes   schedule 03.08.2014git config
это невозможно, но как насчет обходных путей? Есть ли другой способ? - person KevinL   schedule 06.08.2014