代码之家  ›  专栏  ›  技术社区  ›  Gabe Moothart

“git diff--patience”是什么意思?

  •  201
  • Gabe Moothart  · 技术社区  · 14 年前

    git diff 算法,我想什么时候使用它?

    3 回复  |  直到 14 年前
        1
  •  178
  •   Mark Rushakoff    14 年前

    你可以阅读 a post from Bram Cohen ,是patience diff算法的作者,但我发现 this blog post

    相反,Patience Diff将精力集中在低频高内容行上,这些行充当文本中重要内容的标记或签名。它的核心仍然是基于LCS的diff,但有一个重要的区别,因为它只考虑签名行的最长公共子序列:

    找到所有在两边恰好出现一次的行,然后对这些行执行最长的公共子序列,将它们匹配起来。

    使用

    真正糟糕的情况是两个版本出现分歧 很明显,开发人员没有注意保持补丁大小 因为它与花括号的长部分匹配而变得“错位” 一起,但它最终将 一个版本中的下一个后面的函数的花括号 其他版本。这种情况是 非常丑陋 ,并可能导致 最连贯地呈现。

        2
  •  51
  •   robinst    13 年前

    git merge --strategy-option=patience ...
    
        3
  •  41
  •   Wilfred Hughes AntuanSoft    7 年前

    patience diff算法是一种速度较慢的diff算法,在某些情况下显示出更好的结果。

    .foo1 {
        margin: 0;
    }
    
    .bar {
        margin: 0;
    }
    

    现在,我们重新排序部分并添加一行:

    .bar {
        margin: 0;
    }
    
    .foo1 {
        margin: 0;
        color: green;
    }
    

    默认的diff算法声明节标题已更改:

    $ git diff --diff-algorithm=myers   
    diff --git a/example.css b/example.css
    index 7f1bd1e..6a64c6f 100755
    --- a/example.css
    +++ b/example.css
    @@ -1,7 +1,8 @@
    -.foo1 {
    +.bar {
         margin: 0;
     }
    
    -.bar {
    +.foo1 {
         margin: 0;
    +    color: green;
     }
    

    而耐心差异则显示出一个可以说更直观的结果:

    $ git diff --diff-algorithm=patience
    diff --git a/example.css b/example.css
    index 7f1bd1e..6a64c6f 100755
    --- a/example.css
    +++ b/example.css
    @@ -1,7 +1,8 @@
    -.foo1 {
    -    margin: 0;
    -}
    -
     .bar {
         margin: 0;
     }
    +
    +.foo1 {
    +    margin: 0;
    +    color: green;
    +}
    

    a good discussion of subjective diff quality here ,和 git 2.11 is exploring diff heuristics further .

    请注意 patience diff algorithm still has some known pathological cases .