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.