什么是diff程序中的-Naur参数?

6
我注意到每次我们创建差异时,都使用以下命令。
diff -Naur old new > file.patch

我想知道这个-Naur开关是什么,它的名字是怎么来的,它有什么特别之处?当然,我可以使用不带Naur选项的diff程序来发现差异。但是,我正在寻找更多关于它的信息。


请参考 man diff 获取答案! - devnull
2个回答

21

我知道这是一个旧问题,已经有答案了,但它没有深入到我个人所寻找的深度。因此,我进行了自己的研究,并在下面发布:

我想知道这个-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实用程序添加了统一diff支持,该功能首次亮相于

GNU diff 1.15于1991年1月发布。自那以后,GNU diff已经将上下文格式一般化,允许任意格式化差异。

该格式与上下文格式相同,以相同的两行标题开头,但原始文件前面加上“---”,新文件前面加上“+++”。接下来是一个或多个更改块,其中包含文件中的行差异。未更改的上下文行前面有一个空格字符,添加的行前面有一个加号,“-”表示删除的行。

这基本上意味着-u标志允许diff以一种通常已知、公认和接受的格式输出补丁数据。


4

diff -Naurdiff -N -a -u -r 的缩写。你也可以写成 diff -uraN,得到相同的结果。有了这些信息,你就可以在 man 手册中查找其他内容。


非常感谢!这是一条捷径。我甚至可以组合使用#ls -lar。 - dexterous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接