git diff - 输出显示“错误”的变化

时间:2018-06-08 12:04:28

标签: git gitlab diff git-diff

假设我得到比较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
...

这会让我的生活更轻松。谢谢!

2 个答案:

答案 0 :(得分:0)

我的意思是,您可以尝试指定不同的算法,看看在给定的情况下,其中一个算法是否能为您提供更好的结果。请参阅git diff文档(https://git-scm.com/docs/git-diff);有一个--algorithm选项,您可以选择patienceminimalhistogrammyers

在这种情况下,他们中的任何一个会做你想做的吗?根据我的测试,没有;但是,我认为这可能是一个夸张的例子,所以也许其中一个可以帮助你的真实场景。我不知道一个好的"实用的"解释何时最佳或其输出如何不同;但是现在您已经掌握了算法的名称,我想您可以决定是否值得尝试研究这些算法。

我说除了看起来很明显之外还有更多的差异。通常有多个补丁可以让你从A点到B点,它可以解释为更好的"。在某些情况下,特殊用途差异工具可以使用语言结构的意识更聪明一些;但你所展示的是一个高度重复的文件,几乎没有表明结构,所以我甚至不认为这种想法在这里必然会有所帮助。

答案 1 :(得分:0)

您显示的案例包含具有相同内容的所有行,git算法无法将一行与另一行区分开来。如果线条不同,它会显示哪条线路发生了变化(添加或删除)。然后,为了更进一步,您可以使用git diff --word-diffhttps://git-scm.com/docs/git-diff#git-diff---word-diffltmodegt)向您显示每个字符的差异,而不是每行。