コードのインデントの違いを無視するパッチを作成するには?

コードのインデントの違いを無視するパッチを作成するには?

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スペースに関連するオプションが複数あります。ただし、パッチの場合はほとんど使用されません。マニュアルページでは、両方に言及するあいまいなヒントを提供します。牛に似た一種の栄養:

   -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

そしてFreeBSD

   -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>入力ファイルのすべての文字シーケンスと一致するようになります。他の文字は正確に一致する必要があります。

おすすめ記事