코드의 들여쓰기 차이를 무시하는 패치를 만드는 방법은 무엇입니까?

코드의 들여쓰기 차이를 무시하는 패치를 만드는 방법은 무엇입니까?

diff 도구를 사용하여 파일 패치를 만들려고 합니다. 그런데 문제가 발생했습니다. 제가 하는 방법은 다음과 같습니다.

나는 a라는 이름의 하나의 디렉토리를 만들고 거기에 원본 파일을 넣었습니다.

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공백과 관련된 옵션이 두 개 이상 있습니다. 그러나 패치에는 덜 유용합니다. 매뉴얼 페이지는 두 가지를 모두 언급하는 모호한 힌트를 제공합니다.암소 비슷한 일종의 영양:

   -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(아마도 의도한 바가 아닐 수 있음).

POSIX 차이점, 그런데 -b옵션만 있습니다.

을 위한 patch,POSIX옵션 을 문서화합니다 -l.

-l
(그 편지<blank>.) 차이 스크립트의 문자 시퀀스가 <blank>​​입력 파일의 문자 시퀀스와 일치하도록 합니다. 다른 문자는 정확하게 일치해야 합니다.

답변2

diff-w공백 변경 사항( ) 을 무시하는 옵션이 있습니다. patch( -l)에도 동일합니다. 일반적으로 공백을 무시하는 것은 나쁜 생각이므로 누군가의 편집자가 끔찍한 일을 한 특별한 경우에만 사용해야 합니다.

관련 정보