패치 할 때 인수 -p0과 -p1의 차이점은 무엇입니까?


19

차이 무엇 patch -p0patch -p1?

전혀 차이가 있습니까?

답변:


23

패치를 작성하는 가장 일반적인 방법은 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패치가 제조 된 방법에 따라.


이것은 오랫동안 나를 혼란스럽게했습니다. 하위 디렉토리의 동작이 -p0과 다른 이유는 무엇입니까? 나는 항상 -p0이 기본값이라고 가정 했으므로 p0이되어야한다면 항상 문제가있었습니다
Brydon Gibson

@BrydonGibson 나는 원래 아이디어는 패치 작성자가 무관심하게 쓸 수 있다는 것을 의심 diff old/foo new/foo >my.patch하거나 diff ../old/foo foo >my.patch또는 diff foo.old foo >my.patch사용자가 그것을 적용 할 수있는 patch <my.patch패치를 제작 한 후, 어떻게 걱정 할 필요없이 -p편의 추가되었습니다. 그러나 나는 실제로 모른다, patch구식 유틸리티이며, 사용하기 시작했을 때 -p0또는 -p1이미 가장 일반적인 방법이었습니다.
Gilles 'SO- 악마 그만'

16

남자에게서 :

-pnum 또는 --strip=num 패치 파일에있는 각 파일 이름에서 선행 슬래시가 포함 된 가장 작은 접두사를 제거하십시오. 하나 이상의 인접한 슬래시 시퀀스는 단일 슬래시로 계산됩니다. 패치를 보낸 사람과 다른 디렉토리에 파일을 보관할 경우 패치 파일에서 찾은 파일 이름을 처리하는 방법을 제어합니다. 예를 들어 패치 파일의 파일 이름이 다음과 같다고 가정합니다.

 /u/howard/src/blurfl/blurfl.c

설정은 -p0수정되지 않은 전체 파일 이름을 제공 , -p1제공

 u/howard/src/blurfl/blurfl.c

최고의 슬래시없이 , -p4제공

 blurfl/blurfl.c

4

차이점은 이후 -p의 숫자는 제거 될 경로 구성 요소의 수를 지정한다는 것입니다.

경로가 있다고 가정 해 봅시다 /Barack/Obama. -p0인수 로 패치를 실행 하면 경로를 그대로 취급합니다 .

/Barack/Obama

그러나 패치하는 동안 경로를 다듬을 수 있습니다.

-p1루트 슬래시 를 제거합니다 (슬래시가 남지 않고 지금은 Barack이됩니다).

Barack/Obama

-p2 Barack (및 인접한 오른쪽 슬래시)을 제거합니다.

 Obama

patch동작 의 "이유"를 확장하려면 이 스레드를 읽으십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.