耐心算法与默认git diff
算法有什么不同,以及我何时想使用它?git diff --patience是什么?
185
A
回答
157
您可以阅读a post from Bram Cohen,耐心DIFF算法的作者,但我发现this blog post总结耐心DIFF算法非常好:
耐心差异,相反,集中它的能量在低频率高 - 作为文本中重要内容的标记或签名的内容行。它仍然是其核心基于LCS-DIFF,但有一个重要的区别,因为它仅考虑了签名行的最长公共子:
发现其两侧出现一次的所有行,然后做这些线上最长的公共子序列,将它们匹配起来。
当你应该使用耐心差异?据布拉姆,耐心DIFF有利于这种情况:
非常糟糕的情况是那些在两个版本的分歧 显着和开发商不小心让小片尺寸 在控制之下。在这些情况下,差异算法有时可能会由于它将大段大括号 放在一起而变得“未对齐”,但它将一个版本的 中的函数的大括号与下一个函数的大括号相关联 其他版本。这种情况是非常难看的,并且可能会导致完全不可用的冲突文件,在这种情况下,您最需要的是相干地提供的这样的内容。
41
21
耐心DIFF算法是一个缓慢的DIFF算法,显示在某些情况下,更好的结果。
假设你有以下文件签入到混帐:
.foo1 {
margin: 0;
}
.bar {
margin: 0;
}
现在我们重新安排部分并添加新行:
.bar {
margin: 0;
}
.foo1 {
margin: 0;
color: green;
}
默认比较算法声称,该部分的标题有已更改:
$ 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。请注意0。
相关问题
- 1. “git diff”中的“diff --git”输出是指什么?
- 2. `git diff HEAD ^`的反义词是什么?
- 3. 我可以让“git gui”通过,比如说“--patience”改为“git diff”吗?
- 4. 什么是`git diff --word-diff'默认正则表达式?
- 5. git diff用于diff命令的参数是什么?
- 6. `git diff`和`git difftool`有什么区别?
- 7. 为什么git difftool会使用git diff?
- 8. 当git diff不是
- 9. 在svn diff或git diff中的符号“@@ ... @@”元行是什么意思?
- 10. git diff中的两个加号是什么意思?
- 11. diff --staged与git中的staged文件进行比较是什么?
- 12. Git Diff标题上的数字是什么意思?
- 13. git diff和git difftool什么也不做,并且没有输出
- 14. git:为什么git diff不显示任何差异?
- 15. 'git format-patch和'git diff'有什么区别?
- 16. 在Windows中使用Git Bash的命令是什么当在git diff模式?
- 17. 什么是git“快照”?
- 18. git diff日期?
- 19. 的Git:什么是指数
- 20. 实时git diff
- 21. Git diff忽略
- 22. 为什么'svn diff --diff-cmd = diff'输出内部diff格式?
- 23. perforce diff to git
- 24. 如果HEAD被分离,那么git diff与之比较的是什么?
- 25. Git diff pattern
- 26. Git diff with textutil
- 27. Diff git fork
- 28. Git diff --stat说明
- 29. git log -p vs git show vs git diff
- 30. Ruby“diff-lcs”diff输出的一般格式是什么?
也许它匹配移动代码和修改后的行可能会更慢 – codymanix 2010-10-28 16:32:24
我已经提取了一个独立的脚本,用于来自Bazaar的Patience Diff,您可以在[另一个SO线程]中找到它(http://stackoverflow.com/questions/4599456 /文本方式-版本比较-JSON/4599500#4599500)。 – TryPyPy 2011-01-05 00:48:23
后续问题。我何时不应该使用耐心差异? – balki 2012-11-29 15:32:08