web-dev-qa-db-ja.com

コードのインデントの違いを無視してパッチを作成するにはどうすればよいですか?

差分ツールを使用してパッチファイルを作成しようとしていますが、問題が発生しています。実行方法は次のとおりです。

という名前のディレクトリを1つ作成し、その中に元のファイルを配置しました。

_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つの基礎は望ましくありません。

7
Ram

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

および 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 diff ちなみに、-bオプションしかありません。

patchの場合、 [〜#〜] posix [〜#〜]-lオプションを文書化します:

-l
(文字ell)差分スクリプトの<blank>文字のシーケンスを、差分スクリプトの<blank>文字のシーケンスと一致させます。入力ファイル。他の文字は完全に一致するものとします。

7
Thomas Dickey

diffには、空白の変更を無視するオプションがあります(-w)、patch-l)。一般に、空白を無視することは悪い考えです。したがって、誰かの編集者が何か恐ろしいことをしたときの特別な場合のために、空白の使用を予約する必要があります...

8
frostschutz