我看过很多博客文章和堆栈溢出的帖子说,
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
这个差异(图片由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 for Windows 2.0)
-s
选项的说明如下:使用给定的合并策略;可以多次提供以指定它们应尝试的顺序。如果没有 -s 选项,则使用内置的策略列表(在合并单个头时使用 git merge-recursive,在合并八爪鱼时使用 git merge-octopus)。
这听起来似乎不太可能将其作为默认行为。 - Chris Hayesgit config
是不可能的,但是有没有其他的解决方法呢? - KevinL