如何忽略差异中的移动线

dna*_*ger 15 diff

我目前正在研究源代码生成工具。为了确保我的更改不会引入任何新的错误,diff在我的更改之前和之后的程序输出之间,理论上是一个有价值的工具。

然而,事实证明这比人们想象的要困难,因为该工具import以半随机排序的方式输出顺序无关紧要的行(如语句、函数声明等)。正因为如此, 的输出diff被许多更改杂乱无章,实际上只是将行移动到同一文件中的另一个位置。

有没有办法让 diff 忽略这些移动,只输出真正添加或删除的行?

cYr*_*rus 6

您可以先尝试对它们进行排序。就像是:

sort file-a > s-file-a
sort file-b > s-file-b
diff s-file-a s-file-b
Run Code Online (Sandbox Code Playgroud)

Bash(和 zsh)可以通过进程替换在一行中完成此操作

diff <(sort file-a) <(sort file-b)
Run Code Online (Sandbox Code Playgroud)

  • 我可以预见这会错过一些变化。有时顺序很重要,有时则不重要。您丢弃所有上下文。 (2认同)

l0b*_*0b0 4

您可以进行简单的比较,将结果存储在某处(以避免再次比较),循环遍历任一版本中的行,然后从另一侧删除这些行。

这为工作代码产生了一个单独的项目。代码。