差分ツールを使用してパッチファイルを作成しようとしていますが、問題が発生しています。現在の方法は次のとおりです。
という名前のディレクトリを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つの基礎は、私たちが望んでいないことです。
承認された回答:
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
への変更を無視できます パラメータ(おそらく意図したものではありません)。
ちなみに、POSIXdiffには-b
しかありません オプション。
patch
の場合 、POSIXは -l
を文書化します オプション:
-l </ code>
( ellの手紙 。)の任意のシーケンスを発生させます
の任意のシーケンスに一致する差分スクリプトの文字 入力ファイルの文字。他の文字は完全に一致する必要があります。