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

차이 무엇 patch -p0patch -p1?

전혀 차이가 있습니까?



답변

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


답변

남자에게서 :

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

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

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

 u/howard/src/blurfl/blurfl.c

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

 blurfl/blurfl.c

답변

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

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

/Barack/Obama

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

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

Barack/Obama

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

 Obama

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


답변