为什么git不忽略空行?

时间:2019-12-07 10:57:44

标签: git git-diff

对于下一个最终代码:

enter image description here

我想看看有什么变化:git diff -b -w --ignore-blank-lines

enter image description here

代码行$data = [ map{ { id => $_-> id, ip => $_->ip } } $firewall->all ];显示为已移动,但未移动。

使用--ignore-blank-lines选项,我希望得到下一个结果:

enter image description here

$ git --version
git version 2.24.0

只有在源代码中手动删除688、689行时,我才能获得预期的结果。

为什么git不忽略688、689行?

2 个答案:

答案 0 :(得分:2)

git diff从不保证向您展示您实际完成的工作,也没有承诺向您提供实现结果的某些特殊方法。它只承诺显示将实现相同结果的一组添加和删除的行(或在单词差异模式下为单词)。

此外,使用各种ignore-white-space-changes选项,Git选择显示“删除一些行,然后放回一些行”的序列似乎很奇怪。请注意,它还说要删除原始的### Change NAS Config,然后重新添加一个新的### Change NAS Config,这样看起来(即忽略任何空白更改,例如tabs-vs-spaces)在外观上都是相同的。

进行调试和/或诊断的方法是提供实际的前后文件,或者提供其中的一些子集,这些文件在运行git diff时继续显示相同的git diff --no-index options old-file new-file行为,给那些有时间和兴趣来弄清楚git diff为何提出的差异至少是视觉次优的人。

实际的算法涉及尝试查找具有尽可能少的指令的更改,该更改倾向于保留现有行,但是如果它可以在删除和删除时保留多个现有(但与视觉无关)行,然后重新添加其他一些现有的(与视觉相关的)行,则它可能会选择对人类来说看起来更糟的行,但在变更次数方面,其行之有效或同等或更有效。

用于忽略空格的 options 旨在使结果在视觉上更加相关,但在这种情况下似乎失败了。拥有触发这种情况的实际输入文件对于弄清原因至关重要。我对这个领域有些兴趣,但是没有足够的时间进行研究。无论如何,我们在StackOverflow上只能说这很正常:diffs不能保证对您有用,

答案 1 :(得分:1)

请参阅git diffgit help diffhttps://git-scm.com/docs/git-diff#Documentation/git-diff.txt---ignore-blank-lines)的文档:

  

-ignore-blank-lines

     

忽略所有行均为空白的更改。

因此,该选项会忽略仅包含空白行但仍显示空白行的差异更改

查看我的测试

我创建了一个新文件,其中包含Hello,2个空格和World。 然后,我执行了git initgit add . 在我删除一个空白行并分别命名为git diffgit diff --ignore-blank-lines之后。

git diff

 Hello

-
 World

git diff --ignore-blank-lines

相关问题