5

我已经看到,每当我们创建差异时,我们都会使用以下命令。

diff -Naur old new > file.patch

我想知道这个-Naur开关是什么。这个名字是怎么来的,它的特点是什么?当然,我可以在没有 Naur 选项的情况下执行 diff 程序来发现差异。但是,我正在寻找更多关于它的信息。

4

2 回答 2

17

我意识到这是一个已经有答案的老问题,但它并没有深入我个人寻找的深度。所以我做了我自己的研究,我在下面发布:

我想知道这个-Naur开关是什么。

这个关于创建补丁站点的官方 GNU 站点很好地解释了它;-Naur是一系列四 (4) 个diff命令开关,分解如下:

  • -N: 将不存在的文件视为空文件;允许补丁创建和删除文件。
  • -a:将所有文件视为文本;允许补丁更新非文本(又名:二进制)文件。
  • -u:设置默认3行统一上下文;这会生成有用的时间戳和上下文。
  • -r:递归比较找到的任何子目录;允许补丁更新子目录。

-u标志使我感到困惑,但是diff 实用程序上的维基百科页面有一个很好的解释;大胆的强调是我的:

统一格式(或 unidiff)继承了上下文格式所做的技术改进,但产生的差异更小,新旧文本紧邻呈现。统一格式通常使用“-u”命令行选项调用。此输出通常用作补丁程序的输入。许多项目特别要求“diffs”以统一格式提交,使统一diff格式成为软件开发人员之间最常见的交流格式。

统一上下文差异最初是由 Wayne Davison 在 1990 年 8 月开发的(在 unidiff 中出现在 comp.sources.misc 的第 14 卷中)。一个月后,Richard Stallman 为 GNU 项目的 diff 实用程序添加了统一差异支持,并且该功能在 1991 年 1 月发布的 GNU diff 1.15 中首次亮相。GNU diff 已经将上下文格式推广到允许任意格式化差异。

该格式以与上下文格式相同的两行标题开头,不同之处在于原始文件以“---”开头,新文件以“+++”开头。在此之后是一个或多个包含文件中行差异的更改块。未更改的上下文行前面有一个空格字符,添加行前面有一个加号,删除行前面有一个减号。

这基本上意味着该-u标志允许 diff 以众所周知的、公认的和接受的格式输出补丁数据。

于 2015-08-21T05:44:13.960 回答
3

diff -Naur是 的缩写diff -N -a -u -r。您也可以编写diff -uraN并获得相同的结果。有了这些信息,您可以在手册页中查找其余信息。

于 2013-11-06T06:09:14.407 回答