我做了一个补丁文件
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
工作正常并且不询问路径