耐心算法与默认git diff算法有何不同,我什么时候想使用它?
git diff
你可以阅读耐心差异算法的作者Bram Cohen的一篇文章,但我发现这篇博文很好地总结了耐心差异算法:
相反,耐心差异将其精力集中在低频高内容行上,这些行用作文本中重要内容的标记或签名。它的核心仍然是基于 LCS 的差异,但有一个重要区别,因为它只考虑签名行的最长公共子序列: 找到两边恰好出现一次的所有行,然后在这些行上做最长公共子序列,将它们匹配起来。
相反,耐心差异将其精力集中在低频高内容行上,这些行用作文本中重要内容的标记或签名。它的核心仍然是基于 LCS 的差异,但有一个重要区别,因为它只考虑签名行的最长公共子序列:
找到两边恰好出现一次的所有行,然后在这些行上做最长公共子序列,将它们匹配起来。
什么时候应该 使用 耐心差异?根据 Bram 的说法,耐心差异对这种情况有好处:
真正糟糕的情况是两个版本的差异很大,并且开发人员没有小心控制补丁大小。在这种情况下,diff 算法有时会变得“未对齐”,因为它将大括号的长部分匹配在一起,但它最终会将一个版本中的函数的大括号与另一个版本中的下一个后续函数的大括号相关联。这种情况 非常难看 ,并且在您最需要连贯地呈现此类内容的情况下,可能会导致完全无法使用的冲突文件。