적용해야 할 패치를 받았지만 파일 이름으로 인해 사용할 -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>