GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Cara Membuat Patch Mengabaikan Perbedaan Indentasi Dalam Kode?

Saya mencoba membuat tambalan file menggunakan alat diff. Tetapi menghadapi masalah. Cara yang saya lakukan adalah di bawah ini.

Saya telah membuat satu Direktori bernama a dan memasukkan file asli ke dalamnya.

a/original_file.c

Sekarang saya telah membuat Direktori lain bernama b dan memasukkan file yang sama dengan konten yang dimodifikasi ke dalamnya.

b/original_file.c

Sekarang isi b/original_file.c file yang saya salin dari internet dan memasukkannya ke dalam beberapa editor teks.

Setelah memberikan perintah:diff -Naur a b > patch_file.patch , file patch_file.patch dihasilkan dan memiliki beberapa perubahan yang tidak diinginkan (terkait dengan lekukan).

Misalnya:

return mg_nw (MG_READY_NOY, &rmsg, seqnr,
-                 sizeof (struct mg_rdy_notify));
+                  sizeof (struct mg_rdy_notify)); 

Sekarang Anda dapat melihat ada perubahan terkait lekukan di mana sizeof (struct mg_rdy_notify)) diganti dengan sizeof (struct mg_rdy_notify)) yang sama tapi satu dasar lekukan yang tidak kita inginkan.

Jawaban yang Diterima:

diff memiliki lebih dari satu opsi yang terkait dengan spasi. Namun, satu kurang berguna untuk tambalan. Halaman manual memberikan petunjuk yang tidak jelas, mengacu pada kedua 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

dan 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.

Biasanya seseorang menggunakan -b , karena itu cenderung mengabaikan perubahan signifikan. Jika Anda hanya mengubah lekukan, maka keduanya -b dan -w memberikan hasil yang sama. Di sisi lain, jika Anda memasukkan spasi yang tidak ada, atau menghapus spasi yang ada (tidak meninggalkan apa pun), itu bisa menjadi perubahan dalam program Anda. Ini contohnya:

$ 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 */

Dalam hal ini, -w opsi memungkinkan Anda untuk mengabaikan perubahan pada setlocale parameter (mungkin bukan yang dimaksudkan).

Omong-omong, perbedaan POSIX hanya memiliki -b pilihan.

Untuk patch , POSIX mendokumentasikan -l pilihan:

-l
(Huruf ell .) Menyebabkan urutan <blank> karakter dalam skrip perbedaan untuk mencocokkan urutan <blank> karakter dalam file masukan. Karakter lain harus sama persis.


Linux
  1. Bagaimana Linux datang ke mainframe

  2. Cara Membuat Script Perintah Linux

  3. Cara membuat layanan Systemd di Linux

  1. Cara menggunakan perintah grep Linux

  2. Cara menggunakan perintah history di Linux

  3. Cara membuat file swap di Linux

  1. Cara membuat paket RPM Linux

  2. Cara Membuat Swap di Linux

  3. Bagaimana cara membongkar biner yang dapat dieksekusi di Linux untuk mendapatkan kode perakitan?