Apr 18, 2008

diff & patch 用法

建立patch:


updated dir : src/update

original dir : src/orig

# diff -ruN src/orig src/update > my.patch


套用patch:


# cd src/

# patch -p1 < my.patch


如果是製作linux kernel的patch

<kernel source>/Documentation/dontdiff    這個檔案可用來套在--exclude-file選項

# diff -ruN --exclude-file src/update/Documentation/dontdiff \

  src/orig src/update > my.patch


如何決定-p參數後面的數字?


假設patch檔裡面的檔案路徑如下
diff  a/mm/fadvise.c b/mm/fadvise.c

而mm在目前bash所在位置,則上述路徑的 a/ 及 b/ 必須被忽略

patch指令才能夠在目前pwd 找到mm/fadvise.c,也就是要忽略一個 /

因此使用-p1
$ ls -l

總計 90291
drwxr-xr-x 26 fyodor fyodor      688 2008-04-17 19:12 arch
drwxr-xr-x  2 fyodor fyodor     2008 2008-04-18 12:12 block
-rw-r--r--  1 fyodor fyodor    18693 2008-04-17 19:11 COPYING
.

.
drwxr-xr-x  2 fyodor fyodor     4624 2008-04-18 12:24 mm

.

.
-rwxr-xr-x  1 fyodor fyodor 33928415 2008-04-18 12:24 vmlinux
-rw-r--r--  1 fyodor fyodor 57070245 2008-04-18 12:24 vmlinux.o

所以-p要如何使用,取決於目前pwd,以及patch檔的內容

通常kernel patch都是像這個範例的作法

0 comments:

Post a Comment