이전 디렉토리와 새 디렉토리에 서로 다른 수의 하위 디렉토리가 포함되어 있는 경우 patch -p 옵션을 사용하십시오.

이전 디렉토리와 새 디렉토리에 서로 다른 수의 하위 디렉토리가 포함되어 있는 경우 patch -p 옵션을 사용하십시오.

적용해야 할 패치를 받았지만 파일 이름으로 인해 사용할 -p 옵션을 예측하기 어렵습니다.

--- /home/user/foo/bar/baz.c
+++ /data/myproj/project/version/foo/bar/baz.c

foo/bar/baz.c가 포함된 디렉터리에 적용했는데 어떤 패치 번호를 사용해야 할지 모르겠습니다. -p4실패합니다. 두 번째 줄에서는 이것이 제가 예상했던 것입니다. p2또한 실패하지만 그것이 첫 번째 줄에서 예상했던 것입니다.

어느 것을 사용해야 합니까? 아니면 +++와 ---의 선행 디렉토리 수가 동일한 경우에만 패치가 적용되어야 합니까?

답변1

아니면 +++ 및 ---의 주요 디렉토리 수가 동일한 경우에만 패치가 적용되어야 합니까?

예, man patch다음과 같이 언급했습니다.

   If the recipient is supposed to use the -pN option, do not send  output
   that looks like this:

          diff -Naur v2.0.29/prog/README prog/README
          --- v2.0.29/prog/README   Mon Mar 10 15:13:12 1997
          +++ prog/README   Mon Mar 17 14:58:22 1997

   because  the two file names have different numbers of slashes, and dif‐
   ferent versions of patch interpret  the  file  names  differently.   To
   avoid confusion, send output that looks like this instead:

          diff -Naur v2.0.29/prog/README v2.0.30/prog/README
          --- v2.0.29/prog/README   Mon Mar 10 15:13:12 1997
          +++ v2.0.30/prog/README   Mon Mar 17 14:58:22 1997

여기서 할 수 있는 일은 패치를 정규화하고 다음과 같이 적용하는 것입니다.

sed 's,--- /home/user/foo/,--- /data/myproj/project/version/foo/,' orig.patch | patch <other_patch_options>

관련 정보