如何创建忽略代码中缩进差异的补丁?

如何创建忽略代码中缩进差异的补丁?

我正在尝试使用 diff 工具创建补丁文件。但面临一个问题。我正在做的方式如下。

我创建了一个名为 a 的目录,并将原始文件放入其中。

a/original_file.c

现在我创建了另一个名为 b 的目录,并将修改内容的相同文件放入其中。

b/original_file.c

现在我从互联网复制了文件内容b/original_file.c并将其放入某个文本编辑器中。

发出命令:后diff -Naur a b > patch_file.patch,将生成文件patch_file.patch,并且它有一些不需要的更改(与缩进有关)。

例如:

return mg_nw (MG_READY_NOY, &rmsg, seqnr,
-                 sizeof (struct mg_rdy_notify));
+                  sizeof (struct mg_rdy_notify)); 

现在您可以看到与缩进相关的更改,其中sizeof (struct mg_rdy_notify))被替换为相同sizeof (struct mg_rdy_notify))但一个缩进基础,这是我们不想要的。

答案1

diff有不止一个与空白相关的选项。然而,对于补丁来说,它的用处不大。手册页给出了一个晦涩的提示,提到了两者GNU:

   -B, --ignore-blank-lines
          ignore changes where lines are all blank
   -b, --ignore-space-change
          ignore changes in the amount of white space
   -w, --ignore-all-space
          ignore all white space

自由BSD

   -b     Ignore changes in amount of white space.
   -B     Ignore changes that just insert or delete blank lines.
   -w     Ignore white space when comparing lines.

通常人们使用-b,因为这样不太可能忽视重大变化。如果您仅更改了缩进,则两者-b都会-w给出相同的结果。另一方面,如果您在没有空格的地方插入了空格,或者删除了现有空格(不留下任何空格),则可能会更改您的程序。这是一个例子:

$ diff foo.c foo2.c
4c4
<     setlocale(LC_ALL, "");
---
>     setlocale(LC_ALL, " ");
6,7c6,7
<     printw("\U0001F0A1");
<     getch();
---
>     printw ("\U0001F0A1");
>     getch();  /* comment */
$ diff -b foo.c foo2.c
4c4
<     setlocale(LC_ALL, "");
---
>     setlocale(LC_ALL, " ");
6,7c6,7
<     printw("\U0001F0A1");
<     getch();
---
>     printw ("\U0001F0A1");
>     getch();  /* comment */
$ diff -w foo.c foo2.c
7c7
<     getch();
---
>     getch();  /* comment */

在这种情况下,该-w选项允许您忽略对参数的更改setlocale(可能不是预期的更改)。

POSIX 差异顺便说一下,只有这个-b选项。

为了patchPOSIX记录-l选项:

-l
(这封信埃尔.) 使<blank>差异脚本中的任何字符序列与<blank>输入文件中的任何字符序列相匹配。其他字符应完全匹配。

答案2

diff可以选择忽略空格更改 ( ),与( )-w相同。一般来说,忽略空白不是一个好主意,所以你应该保留它在特殊情况下的使用,当某人的编辑做了一些可怕的事情时......patch-l

相关内容