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
オプションです。
のためにpatch
、POSIXロギング-l
オプション:
-l
(この手紙エルザ.)<blank>
違いスクリプトのすべての文字シーケンスが<blank>
入力ファイルのすべての文字シーケンスと一致するようになります。他の文字は正確に一致する必要があります。
答え2
diff
オプションで空白の変更()を無視します。-w
()と同じです。一般に、スペースを無視するのは良い考えではないので、誰かの編集者が何かひどいことをする特別な場合にのみ使用してください。patch
-l