为什么 git 不忽略空行?
Why does git not ignore blank lines?
下一个最终代码:
我想看看有什么变化:git diff -b -w --ignore-blank-lines
代码行$data = [ map{ { id => $_-> id, ip => $_->ip } } $firewall->all ];
显示为已移动,但并未移动。
使用 --ignore-blank-lines
选项我期望下一个结果:
$ git --version
git version 2.24.0
只有在源代码中手动删除 688、689 行,我才能得到预期的结果。
为什么git不忽略688、689行?
请参阅 git diff
(git help diff
或 https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---ignore-blank-lines)的文档:
--ignore-blank-lines
Ignore changes whose lines are all blank.
因此,该选项会忽略 差异更改,这些更改仅包含空行但仍会显示它们。
查看我的测试:
我创建了一个包含 Hello
、2 个空格和 World
的新文件。
然后,我执行了 git init
和 git add .
在我删除一个空行并调用 git diff
和 git diff --ignore-blank-lines
.
之后
git diff
:
Hello
-
World
git diff --ignore-blank-lines
:
git diff
从未承诺向您展示您实际 所做的事情,也不承诺以某种特定方式 实现您所取得的成果.它承诺只显示一组添加和删除的行(或在单词差异模式下,单词)将获得相同的结果。
除此之外,通过各种 ignore-white-space-changes 选项,Git 选择显示 "delete some lines, then put some of them back" 的序列似乎很奇怪。请注意,它还说要删除原始的 ### Change NAS Config
然后添加一个新的 ### Change NAS Config
视觉上(即忽略任何白色 space 更改,例如 tabs-vs-space s) 看起来相同。
调试 and/or 诊断的方法是提供实际的前后文件,或者当 [=51] 时继续显示相同 git diff
行为的部分子集=] git diff --no-index <em>options</em> old-file new-file
, 给有时间和兴趣的人弄清楚为什么 git diff
呈现出至少 视觉上 次优的差异。
所涉及的实际算法试图找到具有尽可能少的指令的更改,这往往会保留现有的行,但如果它可以保留多个现有的(但视觉上不相关的) ) 行,同时删除并重新添加一些其他现有的(视觉相关的)行,它可能会选择对人类来说看起来更糟糕的行,但在更改次数方面同样或更有效。
忽略白色的options
space 是为了使结果在视觉上更相关,但在这种情况下似乎失败了。拥有触发这种情况的实际输入文件对于找出原因至关重要。我对这个领域有些兴趣,但没有足够的时间来研究它。在任何情况下,我们在 Whosebug 上只能说这 是 正常的:差异并不保证对您有用。
下一个最终代码:
我想看看有什么变化:git diff -b -w --ignore-blank-lines
代码行$data = [ map{ { id => $_-> id, ip => $_->ip } } $firewall->all ];
显示为已移动,但并未移动。
使用 --ignore-blank-lines
选项我期望下一个结果:
$ git --version
git version 2.24.0
只有在源代码中手动删除 688、689 行,我才能得到预期的结果。
为什么git不忽略688、689行?
请参阅 git diff
(git help diff
或 https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---ignore-blank-lines)的文档:
--ignore-blank-lines
Ignore changes whose lines are all blank.
因此,该选项会忽略 差异更改,这些更改仅包含空行但仍会显示它们。
查看我的测试:
我创建了一个包含 Hello
、2 个空格和 World
的新文件。
然后,我执行了 git init
和 git add .
在我删除一个空行并调用 git diff
和 git diff --ignore-blank-lines
.
git diff
:
Hello
-
World
git diff --ignore-blank-lines
:
git diff
从未承诺向您展示您实际 所做的事情,也不承诺以某种特定方式 实现您所取得的成果.它承诺只显示一组添加和删除的行(或在单词差异模式下,单词)将获得相同的结果。
除此之外,通过各种 ignore-white-space-changes 选项,Git 选择显示 "delete some lines, then put some of them back" 的序列似乎很奇怪。请注意,它还说要删除原始的 ### Change NAS Config
然后添加一个新的 ### Change NAS Config
视觉上(即忽略任何白色 space 更改,例如 tabs-vs-space s) 看起来相同。
调试 and/or 诊断的方法是提供实际的前后文件,或者当 [=51] 时继续显示相同 git diff
行为的部分子集=] git diff --no-index <em>options</em> old-file new-file
, 给有时间和兴趣的人弄清楚为什么 git diff
呈现出至少 视觉上 次优的差异。
所涉及的实际算法试图找到具有尽可能少的指令的更改,这往往会保留现有的行,但如果它可以保留多个现有的(但视觉上不相关的) ) 行,同时删除并重新添加一些其他现有的(视觉相关的)行,它可能会选择对人类来说看起来更糟糕的行,但在更改次数方面同样或更有效。
忽略白色的options
space 是为了使结果在视觉上更相关,但在这种情况下似乎失败了。拥有触发这种情况的实际输入文件对于找出原因至关重要。我对这个领域有些兴趣,但没有足够的时间来研究它。在任何情况下,我们在 Whosebug 上只能说这 是 正常的:差异并不保证对您有用。