假设我得到比较2个文件的差异输出:
example
example
example
example
example
example
example
example
和
example
example#
example
example
example
example#
example#
example
基本上,我对原始文件的唯一区别是在某些行中添加#-marks。 对于这两个文件,diff输出将是:
...
example
+example#
example
example
-example
-example
-example
+example#
+example#
example
...
所以diff命令基本上认为我放在第二行的第一个#-mark是文件中的一个全新的行。有没有办法让diff输出像这样的变化:
...
example
-example
+example#
example
example
-example
-example
+example#
+example#
example
...
这会让我的生活更轻松。谢谢!
答案 0 :(得分:0)
我的意思是,您可以尝试指定不同的算法,看看在给定的情况下,其中一个算法是否能为您提供更好的结果。请参阅git diff
文档(https://git-scm.com/docs/git-diff);有一个--algorithm
选项,您可以选择patience
,minimal
,histogram
或myers
。
在这种情况下,他们中的任何一个会做你想做的吗?根据我的测试,没有;但是,我认为这可能是一个夸张的例子,所以也许其中一个可以帮助你的真实场景。我不知道一个好的"实用的"解释何时最佳或其输出如何不同;但是现在您已经掌握了算法的名称,我想您可以决定是否值得尝试研究这些算法。
我说除了看起来很明显之外还有更多的差异。通常有多个补丁可以让你从A点到B点,它可以解释为更好的"。在某些情况下,特殊用途差异工具可以使用语言结构的意识更聪明一些;但你所展示的是一个高度重复的文件,几乎没有表明结构,所以我甚至不认为这种想法在这里必然会有所帮助。
答案 1 :(得分:0)
您显示的案例包含具有相同内容的所有行,git算法无法将一行与另一行区分开来。如果线条不同,它会显示哪条线路发生了变化(添加或删除)。然后,为了更进一步,您可以使用git diff --word-diff
(https://git-scm.com/docs/git-diff#git-diff---word-diffltmodegt)向您显示每个字符的差异,而不是每行。