Linux patch 的產生與使用

假如要 merge code 的話, SVN 有些現成的 function 可以用. 不過對於兩個沒有直接血緣關係的 branch (或者說因為 merge 又 copy 把原來的關係弄混了), merge function 就會失靈. 我猜 merge code 的時候, 看到 skipped missing target 或許就是這樣來的.

此時, diff 和 patch 應該可以幫得上忙. 首先產生 diff.

diff -parameter oldURL newURL>patch_file

parameter 可能是 ruNp 或是 ruNa

r 表示 recursive 比較下面的所有子目錄 

u 表示以統一的方式來表示檔案間的不同, ‘-‘ 表示刪除, ‘+’表示新增.

N (= new-file) 表示某個 file 可以對應到同一個目錄底下的空 file, 因為這個 file 本身可能是新增或是刪除的.

p 對 C 語言的意義是: 可以比較兩者 function 的不同

a 表示是 ascii file, text file

例如: diff -ruNa oldDirectory newDirectory > patch_file

—————————————————

接著要 patch, patch 的格式是 patch -pX

X = 0, 表示從第一層目錄 patch, X = 1, 表示從第二層目錄 patch,…

例如:

cd /D1/D2/D3

cd ../../..

patch -p2 < patch_file

這樣會 patch 到 D3 這一層