patch -p0
이들그리고 그리고 의 차이점은 무엇인가요 patch -p1
?
차이점이 있나요?
답변1
패치를 생성하는 가장 일반적인 방법은 diff
명령이나 일부 버전 제어에 내장된 diff
유사한 명령을 실행하는 것입니다. 때로는 두 파일을 비교하고 diff
다음과 같이 실행합니다.
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
그러면 하나의 파일에 대한 변경 사항이 포함되어 있지만 파일 이름은 전혀 포함되지 않은 패치를 받게 됩니다. 패치를 적용할 때 패치를 적용할 파일을 지정해야 합니다.
patch <alice_to_bob.patch version2_by_alice.txt
일반적으로 디렉터리에 포함된 전체 다중 파일 프로젝트의 두 버전을 비교합니다. 일반적인 호출은 diff
다음과 같습니다.
diff -ru old_version new_version >some.patch
그런 다음 패치에는 헤더 줄에 지정된 파일 이름이 포함됩니다. 예를 들어 diff -ru old_version/dir/file new_version/dir/file
파일 이름에서 patch
접두사 ( old_version
또는 )를 제거해야 합니다. new_version
이것이 -p1
의미하는 바는 첫 번째 수준 디렉터리를 제거하는 것입니다.
때로는 패치의 헤더 줄에 아무런 안내 없이 파일 이름이 직접 포함되는 경우도 있습니다. 이는 버전 제어 시스템에서 일반적입니다. 예를 cvs diff
들어 diff -r1.42 foo
. 그러면 제거할 접두사가 없으므로 지정해야 합니다 -p0
.
특별한 경우, 비교하려는 트리에 하위 디렉터리가 없으면 -p
옵션이 필요하지 않습니다. patch
파일 이름의 모든 디렉터리 부분이 삭제됩니다. 그러나 대부분의 경우 패치 생성 방법에 따라 또는 -p0
이 필요합니다.-p1
답변2
남성의 경우:
-pnum
또는--strip=num
패치 파일에 있는 각 파일 이름에서 앞에 슬래시가 포함된 최소 접두사를 제거합니다. 하나 이상의 인접한 슬래시 시퀀스는 단일 슬래시로 처리됩니다. 패치를 보낸 사람과 다른 디렉토리에 파일을 저장한 경우 패치 파일에서 발견된 파일 이름을 처리하는 방법을 제어합니다. 예를 들어 패치 파일의 파일 이름이 다음과 같다고 가정합니다./u/howard/src/blurfl/blurfl.c
Set은
-p0
수정되지 않은 전체 파일 이름을 제공합니다.,-p1
주어진u/howard/src/blurfl/blurfl.c
선행 슬래시 없음,
-p4
기부blurfl/blurfl.c
답변3
차이점은 다음 숫자가 -p
제거할 경로 구성 요소 수를 지정한다는 것입니다.
도로가 있다고 가정해 봅시다 /Barack/Obama
. 인수를 사용하여 패치를 실행하면 -p0
해당 경로가 처리됩니다.있는 그대로:
/Barack/Obama
하지만 패치하는 동안 경로를 잘라낼 수 있습니다.
-p1
삭제됩니다루트 슬래시(이제 슬래시 없이 Barack만 표시됩니다.)
Barack/Obama
-p2
barak (및 인접한 오른쪽 슬래시)를 제거합니다.
Obama
이 동작의 "이유"에 대해 자세히 알아보려면 patch
다음을 읽어보세요.이 스레드.