【问题标题】:What is diff command telling me?diff 命令告诉我什么?
【发布时间】:2020-07-08 18:14:10
【问题描述】:

我很困惑,因为我看不出这些文件有什么不同。我运行以下命令:

diff -B -w -b foo/user_advances.go bar/user_advances.go

我明白了:

36a37
>   Executed        bool            `boil:"executed" json:"executed" toml:"executed" yaml:"executed"`
40d40
<   Executed        bool            `boil:"executed" json:"executed" toml:"executed" yaml:"executed"`
59a60
>   Executed        string
63d63
<   Executed        string
77a78
>   Executed:        "executed",
81d81
<   Executed:        "executed",
143a144
>   Executed        whereHelperbool
147d147
<   Executed        whereHelperbool
161a162

但我在这里没有看到任何差异,所以这是怎么回事?

【问题讨论】:

  • 查看空格、制表符和结束行。例如在 windows 行以 \r\n 结尾,而在 linux 上它只是 \n.
  • -B -w 和 -b 标志应该忽略空格
  • 我不认为你的文件是相同的。只看第一行:36a37,意思是“在第一个文件的第 36 行之后,需要添加一行:来自第二个文件的第 37 行”。然后它会向我们展示那条线是什么。

标签: diff git-diff


【解决方案1】:

文件中的行顺序略有不同。

36a37 表示必须将以下文本添加到第 36 行之后的第一个文件中,以获得第二个文件中的内容。 40d40 表示必须从第一个文件的第 40 行删除以下文本才能获得第二个文件中的内容。由于两种情况下的文本相同,这意味着第 40 行的内容被删除并移至第 37 行。

同样,删除第63行的内容,移到第60行,删除第81行的内容,移到第78行,以此类推……

在命令行中添加-c 可能会更清楚。 -c 告诉 diff 围绕每个差异提供 3 行上下文,以便您更容易看到文件之间的差异。

【讨论】: