-pNUM 옵션은 패치 파일에 명시되어 있는 '패치할 파일의 위치'를 제대로 찾아주게 하기위한, 'path에서 제거할 prefix의 개수'정도의 의미를 지닌다고 할 수 있습니다. --strip=NUM 과 같습니다.
-pnum or --strip=num
Strip the smallest prefix containing num leading slashes from each file name found in the patch file. A sequence of one or more adjacent slashes is counted as a single slash. This controls how file names found in the patch file are treated, in case you keep your files in a different directory than the person who sent out the patch. For example, supposing the file name in the patch file was
예를 들어, 패치 파일에 '패치할 파일의 위치(이름)'가 /home/dcpark/idst/src/test.c 와 같이 적혀 있을 경우.......
-p0 는 '하나도 수정하지 않은' 전 path가 포함된 것을,
-p1 은 '첫번째 슬래쉬가 빠진' home/dcpark/idst/src/test.c를,
-p4 는 '내번째 슬래쉬 앞까지 빠진' src/test.c를
'패치할 파일의 이름'으로 인식하게 합니다.
-p 옵션을 주지않는 다면, test.c 만 파일이름으로 간주하고 패치를 시도합니다.
보통의 경우, 소스 디렉토리 전체를 백업해두고
(cp -rf /home/dcpark/package /home/dcpark/package.orig)
소스(예: /home/dcpark/package/src/test.c)를 수정해서 패치파일을 만들기때문에
(diff -uNr package.orig package > patch.diff)...
패치할 소스 패키지의 루트디렉토리에서 -p1 을 사용하여 패치를 하는 것입니다.
(cd /home/dcpark/package/ && pach -p1 < where/patch.diff)
그리고 패치후에 나오는 메시지중에
: Hunk #1 succeeded at 1 with fuzz 2
: Hunk #2 failed at 353
: Hunk #3 failed at 374
: 2 out of 3 hunks failed
Hunk는 패치파일에 기록되어 있는 '패치할 조각(덩어리)'입니다.
보통 패치할 때, 위와 같은 메시지가 없어야 문제없이 정상적으로
처리가 된 것이지만, fuzz(퍼지, 껴맞추기)로 시도하여 성공하는
경우에는 위의 첫번째 메시지와 같은 것을 보여주게 됩니다.
위의 메시지에서 '두번째와 세번째 패치 조각'은 실패를 했네요. :)
자세한 것은 man patch 를 참고하세요.
patch man 페이지는 PDF 파일로 변환하여 첨부해두었습니다..