GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come creare una patch ignorando le differenze di indentazione nel codice?

Sto cercando di creare una patch per un file usando lo strumento diff. Ma ho dei problemi. Il modo in cui sto facendo è quello di seguito.

Ho creato una directory denominata a e vi ho inserito il file originale.

a/original_file.c

Ora ho creato un'altra directory denominata b e ci ho inserito lo stesso file con contenuto modificato.

b/original_file.c

Ora contenuto di b/original_file.c file che ho copiato da internet e inserito in un editor di testo.

Dopo aver dato il comando:diff -Naur a b > patch_file.patch , il file patch_file.patch viene generato e presenta alcune modifiche indesiderate (relative al rientro).

Ad esempio:

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

Ora puoi vedere che sono state apportate modifiche relative all'indentazione in cui sizeof (struct mg_rdy_notify)) è sostituito dallo stesso sizeof (struct mg_rdy_notify)) ma una base di indentazione che è ciò che non vogliamo.

Risposta accettata:

diff ha più di un'opzione relativa agli spazi bianchi. Tuttavia, uno è meno utile per le patch. La pagina di manuale fornisce un oscuro suggerimento, riferendosi a entrambi 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

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

Di solito si usa -b , perché è meno probabile che trascuri cambiamenti significativi. Se hai modificato solo il rientro, allora entrambi -b e -w dare lo stesso risultato. D'altra parte, se hai inserito spazi dove non ce n'erano, o cancellato spazi esistenti (non lasciando nessuno), potrebbe essere un cambiamento nel tuo programma. Ecco un esempio:

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

In questo caso, il -w l'opzione ti permette di ignorare la modifica al setlocale parametro (forse non quello previsto).

POSIX diff, tra l'altro, ha solo il -b opzione.

Per patch , POSIX documenta il -l opzione:

-l
(La lettera ell .) Causa qualsiasi sequenza di <blank> caratteri nello script di differenza in modo che corrispondano a qualsiasi sequenza di <blank> caratteri nel file di input. Gli altri caratteri devono essere abbinati esattamente.


Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. Come Linux è arrivato al mainframe

  4. Come creare un pacchetto RPM Linux

  5. Come creare un servizio Systemd in Linux

Come creare partizioni in Linux

Come creare collegamenti simbolici in Linux

Come creare un file in Linux

Come creare collegamenti su desktop Linux

Come creare alias SSH in Linux

Come creare un alias in Linux