原理
現在有一個文件file1,通過修改file1得到了文件file2,然後用diff工具比較file1和file2的差異,得到一個補丁文件file.patch,它記錄了兩個文件的不同之處,patch工具就可以根據這個補丁文件修改file1,從而得到file2。
相關工具
diff
diff [options] 源文件 目標文件
diff用於列出兩個文件的不同之處,指示如何由源文件變為目標文件,可以用重定向生成補丁文件,注意:diff只能用於比較文本文件。常用選項:
-c,輸出一個基於上下文的diff,即提供每處修改的前後機會內容,這樣patch命令可以在打補丁前驗證上下文是否匹配,而補丁文件也更容易閱讀。
-b,忽略空格引起的變化
-B,忽略插入/刪除空行引起的變化
-i,忽略大小寫
-N,在比較目錄時,如果一個文件只在其中一個目錄中找到,那它被視為在第二個目錄中是一個空文件
-r,在比較目錄時,遞歸比較所有子目錄
-u,使用統一的輸出格式
patch
patch [options] 源文件 補丁文件
patch用於根據補丁文件修改源文件,它會直接改動源文件,打補丁前請注意備份。常用選項:
-R,反向補丁,將已經打了補丁的文件恢復到原來的樣子
-p[num],忽略前幾層目錄,目錄的層數由num指定
例1:比較兩個文件
file1:
file2:
執行:
生成補丁文件file.patch:
file1的內容就變成了file2,如果想把file1變為原來的樣子,執行:
例2:比較兩個目錄
在工作路徑下有兩個目錄:doc1和doc2。
執行diff命令,生成補丁文件patch:
用patch工具為doc1打補丁: