linux 打補丁 2原理


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 可以命令行上指定 工作目錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM