Patch

關於更新檔的問題

  • October 7, 2015

我做了一個更新檔文件

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

找到解決方案,您必須包含完整路徑,請參見範例

錯誤的!

--- 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工作正常並且不要求路徑

您的命令patch -p1 file.patch在更新檔文件中查找文件名。刪除文件名中的-p1所有內容,直到第一個/;在你的情況下,這是領先的src/。因此,該命令希望bacula.h在您的目前目錄中找到。

順便說一句,您作為範例提供的文件名有些奇怪。它們不匹配,並且更新檔文件中的文件名不應該匹配,這樣做。我強烈建議您下次複製和粘貼時不要隨意輸入。

引用自:https://unix.stackexchange.com/questions/234352