diff 以行為單位比較兩個文本文件(或者是目錄),并將不同之處輸出到標準輸出上,
patch可以讀入這些輸出,并按照一定的指令使源文件(目錄)更新
diffutils-2.7.2-2
patch-2.5.4-10
1, diff
options:
-r --recursive
-p --show-c-function //標識不同之處所在的函數名(只用于C程序)
-e --ed //ed 命令格式 diff -e test1 test2
//混合ed命令格式(無參數) diff test1 test2
-f //RCS命令簡單格式 diff -f test1 test2 Revision Control System
-c --context //舊版上下文格式 diff -c test1 test2
-u --unified //新版上下文格式 diff -u test1 test2
-N //如果某個文件只在一個目錄中出現,則假定在另一個目錄中為空文件.
diff的輸出格式有三種:列舉方式,命令模式,上下文模式
命令模式有:ed命令模式和RCS(Revision Control System)
上下文模式有:舊版和新版
命令模式記錄的是從test1更新到test2所需要執行的命令,而上下文模式可讀性更好一些.
Linux內核源代碼就是按照新版上下文模式用diff組織的,
eg. diff -Nur linux-2.4.15 linux
2. patch
patch [options] [originalfile] [patchfile]
如果patchfile為空,則從標準輸入讀取
一般使用下面的形式:
patch -p[num] < patchfile
如果不提供p參數將忽略所有的目錄信息,
-p0表示使用全部的路徑信息
-p1表示忽略第一"/"以前的目錄,依次類推
patch可以直接操作上下文格式以及混合ed格式的diff輸出文件,而將ed格式文件通過管道提交給ed程序,
不清楚如何處理RCS格式文件.
eg.
bzcat linux-2.6.1.patch.bz2 | patch -p0
如果希望恢復到原來的版本可以使用 -R (--reverse)參數
但是只對上下文格式的diff文件有效.
eg. patch -R < program-1.2.patch
3. diff-patch和CVS的配合使用
在這種情況下,注意不要把CVS目錄包括進去
eg.
patch -Nur program-1.0 program-1.1 --exclude=CVS