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