GNU/Linux >> Linux の 問題 >  >> Linux

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

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

という名前のディレクトリを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の手紙 。) の任意のシーケンスを発生させます の任意のシーケンスに一致する差分スクリプトの文字 入力ファイルの文字。他の文字は完全に一致する必要があります。


Linux
  1. Linuxgrepコマンドの使用方法

  2. Linuxでエイリアスを作成してエイリアスコマンドを使用する方法

  3. Linux カーネルモジュールのコーディング方法は?

  1. Linuxでhistoryコマンドを使用する方法

  2. Linuxがメインフレームに登場した経緯

  3. Linuxコマンドのスクリプトを作成する方法

  1. LinuxRPMパッケージを作成する方法

  2. Linuxでスワップを作成する方法

  3. LinuxでSystemdサービスを作成する方法