歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 補丁的制作和使用:diff和patch

補丁的制作和使用:diff和patch

日期:2017/2/28 16:10:11   编辑:Linux教程

原理

現在有一個文件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:

  1. this is line1
  2. this is line2
  3. this is line3
  4. this is line4

file2:

  1. this is line1
  2. this is line2 hello
  3. this is line3
  4. this is line4
  5. this is line5

執行:

  1. diff file1 file2 > file.patch

生成補丁文件file.patch:

  1. 2c2
  2. < this is line2
  3. ---
  4. > this is line2 hello
  5. 4a5
  6. > this is line5
對file1打補丁:
  1. patch file1 file.patch

file1的內容就變成了file2,如果想把file1變為原來的樣子,執行:

  1. patch -R file1 file.patch

例2:比較兩個目錄

在工作路徑下有兩個目錄:doc1和doc2。

執行diff命令,生成補丁文件patch:

  1. diff -Nur doc1 doc2 > doc.patch

用patch工具為doc1打補丁:

  1. bash# cd doc1
  2. bash# patch -p1 < ../doc.patch
Copyright © Linux教程網 All Rights Reserved