
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
)에도 동일합니다. 일반적으로 공백을 무시하는 것은 나쁜 생각이므로 누군가의 편집자가 끔찍한 일을 한 특별한 경우에만 사용해야 합니다.