패치에 관한 질문

패치에 관한 질문

패치 파일을 만들었어요

diff -Naur src/bacula.h src/bacula.h.old

이런 파일 좀 주세요

--- src/bacula.h        2015-08-13 15:52:24 +0200
+++ src/bacula.h        2015-10-05 19:21:09 +0200
@@ -72,7 +72,7 @@
 #endif
 #if HAVE_UNISTD_H
 #  ifdef HAVE_HPUX_OS
-#  undef _INCLUDE_POSIX1C_SOURCE
+/*#  undef _INCLUDE_POSIX1C_SOURCE*/
 #  endif
 #include <unistd.h>
 #endif
@@ -95,6 +95,7 @@
 #if defined(_MSC_VER)
 extern "C" {
 #include "getopt.h"
+#include "fcntl.h"
 }
 #endif

패치를 사용할 때 묻습니다.

can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- src/bacula.h       2015-08-13 15:52:24 +0200
|+++ src/bacula.h       2015-10-05 19:21:09 +0200

묻지 않고 src/bacula.h를 자동으로 패치하려면 어떻게 해야 합니까? 나는 사용한다

patch -p1 < file.patch

답변1

명령은 patch -p1 file.patch패치 파일에서 파일 이름을 찾습니다. 귀하의 경우 -p1파일 이름의 모든 항목을 첫 번째 항목까지 제거하십시오 . 따라서 이 명령은 현재 디렉터리에서 찾을 수 있을 것으로 예상됩니다./src/bacula.h

그런데, 예시로 제공하신 파일 이름에 뭔가 매우 이상한 점이 있습니다. 일치하지 않으며, 일치하지 않아야 하는 패치 파일의 파일 이름도 일치하지 않습니다. 다음번에는 자유롭게 타이핑하는 것보다 복사하여 붙여넣는 것을 적극 권장합니다.

답변2

솔루션을 찾았습니다. 전체 경로를 포함해야 합니다. 예를 참조하세요.

잘못된!

--- src/bacula.h   2015-08-13 15:52:24 +0200
+++ src/bacula.h   2015-10-05 19:21:09 +0200

옳은!

--- bacula-7.0.5/src/bacula.h   2015-08-13 15:52:24 +0200
+++ bacula-7.0.5/src/bacula.h   2015-10-05 19:21:09 +0200

첫 번째 불완전한 경로를 사용하면 패치가 작동하지만 매번 bacula.h에 대한 경로를 지정하라는 메시지가 표시됩니다. 두 번째 올바른 경로를 사용하면 patch -p1 < patchfile제대로 작동하고 경로를 묻지 않습니다.

관련 정보