Я видел много сообщений в блогах и сообщений о переполнении стека, которые говорят, что
git config --global diff.algorithm patience
позволит diff и объединить, чтобы использовать параметр стратегии терпения с рекурсивным алгоритмом по умолчанию.
Я нашел это не так, и я представляю следующую демонстрацию, чтобы показать, почему нет.
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
Это намного лучше. Конфликты совпадают с различием, который мы сделали ранее, и семантически корректны.
Как я могу сделать слияние на самом деле использовать настройку терпения, а не просто diff?
Дополнительные снимки в темноте Я пробовал (безуспешно):
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)