设置默认差异算法不会转换为默认合并算法(耐心)

问题描述 投票:15回答:2

我已经看到很多博客文章和堆栈溢出文章说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.1git版本1.8.4.msysgit.0(通过GitHub for Windows 2.0)

[我已经看到很多博客文章和堆栈溢出文章都说git config --global diff.algorithm耐心将允许diff和合并使用耐心策略选项以及默认递归...

git algorithm git-merge git-diff git-config
2个回答
4
投票
这允许我做

git pmerge origin/patience-merge-2

而不是

git merge origin/patience-merge-2 -X patience

在我之前给出的示例中。

一种方法是修补git以添加您要的功能。

0
投票
[请注意,我相信如果要在git中包含这样的补丁,可能需要做一些额外的工作来添加一个启用和禁用此行为的配置值,因为documentation明确指出更改该值仅更改diff算法。替代方法是添加一个配置变量merge.algorithm,如果未设置,则使它执行默认逻辑;如果设置了则使它在merge.algorithm中的算法。

不需要更改代码的另一种选择是shell别名git命令。

© www.soinside.com 2019 - 2024. All rights reserved.