1.創建目錄 demo
cd demo
有bug文件a.txt:
當前目錄為demo
mkdir -p old/a/p vi old/a/p/foo.txt old_line_1 old_line_2
bug 修復后的foo.txt:
當前目錄為demo
mkdir -p new/a/p vi new/a/p/foo.txt new_line_1 new_line_2
補丁產生:
當前目錄為demo
LC_ALL=C TZ=UTC0 diff -Naur old new > foo.patch
補丁內容:
當前目錄為demo
[root@monitor demo]# cat foo.patch
diff -Naur old/a/b/foo.txt new/a/b/foo.txt --- old/a/b/foo.txt 2016-05-26 06:57:56.999206666 +0000 +++ new/a/b/foo.txt 2016-05-26 06:59:03.160497528 +0000 @@ -1,2 +1,2 @@ -old_line_1 -old_line_2 +new_line_1 +new_line_2
模擬打補丁:(補丁針對 old/a/b.foo.txt文件打補丁)
當前目錄demo
[root@monitor demo]# patch -p0 <foo.patch patching file old/a/b/foo.txt
當前目錄demo
[root@monitor demo]# mkdir xx
[root@monitor demo]# cp foo.patch xx
[root@monitor demo]# patch -p0 < xx/foo.patch
patching file old/a/b/foo.txt
cd xx
當前目錄為demo/xx
[root@monitor xx]# patch -p0 < foo.patch
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -Naur old/a/b/foo.txt new/a/b/foo.txt
|--- old/a/b/foo.txt 2016-05-26 06:57:56.999206666 +0000
|+++ new/a/b/foo.txt 2016-05-26 06:59:03.160497528 +0000
說明在當前目錄不能找到 old/a/b/foo.txt (在demo/xx目錄下找到文件與目錄去補丁
P0:你當前的目錄位置,去找old/a/b/foo.txt
p1:你當前目錄位置去找a/b/foo.txt,p1會掉old/,到當前目錄找a/b/foo.txt
p2:你當前目錄位置去找a/b/foo.txt,p2會掉old/a,到當前目錄找b/foo.txt
p3:你當前目錄位置去找a/b/foo.txt,p3會掉old/a/b,到當前目錄找foo.txt
結論:決定補丁如何補:你的補丁所在的目錄(你該把補丁放在那里)
P(N)決定去查找要補丁的文件路徑,不同的N,會掉某部分路徑后,再在當前目錄,找已除掉后路徑,找文件去補丁
P(N)與當前目錄關系很大,與補丁在那里沒有關系
patch -d xx P(N) 〈 XX 可以命令行上指定 工作目錄