jdu*_*unk 10 git diff git-diff
根据官方git 文档:
git diff
-w, --ignore-all-space
Ignore whitespace when comparing lines. This ignores differences
even if one line has whitespace where the other line has none.
Run Code Online (Sandbox Code Playgroud)
然而,基本测试表明事实并非如此。
somefile.txt使用以下内容
创建:git add somefile.txtcp somefile.txt somefile.orig.txtsomefile.txt:
git diff -w somefile.txt > somefile.gitdiffdiff -uw somefile.orig.txt somefile.txt > somefile.diffsomefile.gitdiff与somefile.diff 您应该看到 和diff都git diff生成了一个差异,旨在仅修改第 1 行(到目前为止,一切顺利)。然而...两个差异应该相同(文件名除外)。第 2 行应显示为仅上下文行,其空格完好无损,与原始行没有任何改变。
GNU 生成的 diffdiff是完美的;然而, 生成的 diffgit diff -w有一个严重缺陷:第 2 行中的空格仍然被删除。
第 2 行确实显示为上下文行,而不是要更改的行;然而,因为它与原始版本不同,但没有指定,所以它 1) 是一个空白更改,实际上没有被忽略(与git diff -w罐头上的说明相反),更糟糕的是,2) 它不是一个正确/适当的差异根本没有,因为它与生成它的原始文件并不完全/完全匹配(因此不能依赖它,这对于 diff 等核心工具来说是一件大事)。
这个问题因一个额外的错误而变得更加复杂,该错误git apply --ignore-whitespace也未能执行其应有的操作(因此尝试应用给定的有缺陷的补丁将会失败),如下表所示:
diff -w并且patch --ignore-whitespace工作完美。git等价物则不然。
注意:git v. 2.15.1我已经使用和进行了测试并遇到了相同的结果git v. 2.25.1
鉴于这git是一个已经存在了十多年的成熟且非常受欢迎的工具,我非常惊讶/怀疑:1)它在相当基本的层面上仍然可能存在不是一个而是两个相当明显的错误,2)毕竟,我可能是唯一/第一个注意到/报告这一点的人。
由于以上几点,我想我应该先向SO社区询问:
git?小智 0
您的表格可以使用更好的标签。我会推荐diff command在左侧和patch command顶部。