关于补丁的问题

关于补丁的问题

我做了一个补丁文件

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工作正常并且不询问路径

相关内容