Linux中patch檔案的產生與使用
首先介紹一下diff和patch。在這裡不會把man線上文件上所有的選項都介紹一下,那樣也沒有必要。在99%的時間裡,我們只會用到幾個選項。所以必須學會這幾個選項。
1、diff 命令
--------------------
NAME
diff - find differences between two files
SYNOPSIS
diff [options] from-file to-file
--------------------
簡單的說,diff的功能就是用來比較兩個檔案的不同,然後記錄下來,也就是所謂的diff補丁。語法格式:diff 【選項】 原始檔(夾)目的檔案(夾),就是要給原始檔(夾)打個補丁,使之變成目的檔案(夾),術語也就是“升級”。
下面介紹三個最為常用選項:
-r 是一個遞迴選項,設定了這個選項,diff會將兩個不同版本原始碼目錄中的所有對應檔案全部都進行一次比較,包括子目錄檔案。
-N 選項確保補丁檔案將正確地處理已經建立或刪除檔案的情況。
-u 選項以統一格式建立補丁檔案,這種格式比預設格式更緊湊些。
簡單的示例:
$ diff -uN File0.cpp File1.cpp > diff.patch
diff.patch就是生成的patch檔案。後面會簡單的介紹一下patch檔案的結構。
2、patch 命令
------------------
NAME
patch - apply a diff file to an original
SYNOPSIS
patch [options] [originalfile [patchfile]]
but usually just
patch -pnum <patchfile>
------------------
簡單的說,patch就是利用diff製作的補丁來實現原始檔(夾)和目的檔案(夾)的轉換。這樣說就意味著你可以由原始檔(夾)――>目的檔案(夾),也可以由目的檔案(夾)――>原始檔(夾)。
下面介紹幾個最常用選項:
-p0 選項要從當前目錄查詢目的檔案(夾)
-p1 選項要忽略掉第一層目錄,從當前目錄開始查詢。
************************************************************
在這裡以例項說明:
---old/modules/pcitable Mon Sep 27 11:03:561999
+++new/modules/pcitable Tue Dec 19 20:05:412000
如果使用引數-p0,那就表示從當前目錄找一個叫做old的資料夾,在它下面尋找modules下的pcitable檔案來執行patch操作。
如果使用引數-p1,那就表示忽略第一層目錄(即不管old),從當前目錄尋找modules的資料夾,在它下面找pcitable。這樣的前提是當前目錄必須為modules所在的目錄。而diff補丁檔案則可以在任意位置,只要指明瞭diff補丁檔案的路徑就可以了。當然,可以用相對路徑,也可以用絕對路徑。不過我一般習慣用相對路徑。
************************************************************
-E 選項說明如果發現了空檔案,那麼就刪除它
-R 選項說明在補丁檔案中的“新”檔案和“舊”檔案現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)
簡單的示例:
方式一:$patch File0.cpp diff.patch
方式二:$patch -p0 < diff.patch
通過下面的命令,可以去除補丁,恢復舊版本
$ patch -RE -p0 < diff.patch
3、patch檔案的結構
(1)補丁頭:
補丁頭是分別由---/+++開頭的兩行,用來表示要打補丁的檔案。---開頭表示舊檔案,+++開頭表示新檔案。
(2)塊:
塊是補丁中要修改的地方。它通常由一部分不用修改的東西開始和結束。他們只是用來表示要修改的位置。他們通常以@@開始,結束於另一個塊的開始或者一個新的補丁頭。
塊的縮排:塊會縮排一列,而這一列是用來表示這一行是要增加還是要刪除的。
塊的第一列:
+號表示這一行是要加上的。
-號表示這一行是要刪除的。
沒有加號也沒有減號表示這裡只是引用的而不需要修改。
--- File0.cpp 2013-08-01 13:40:35.579447633 +0800
+++ File1.cpp 2013-08-01 13:41:04.609447640 +0800
@@ -1 +1 @@
-The First file.
+The Second File.
相關文章
- 使用vim修改linux中的檔案Linux
- Linux中檔案與目錄的區別Linux
- LINUX 的patch 製作,及打patchLinux
- linux Typora修改Windows檔案產生亂碼(未解決)LinuxWindows
- 利用MATLAB產生COE檔案Matlab
- 如何使用diff 和 patch 命令對檔案進行協作?
- 差異檔案(diff)和補丁檔案(patch)簡介
- Linux----12 檔案與檔案操作Linux
- 編譯生產pdb檔案的軟體編譯
- 用MATLAB產生VIVADO可用的coe檔案Matlab
- Linux中隱藏檔案與資料夾Linux
- 對於MultipartFile使用tika判斷檔案型別,不會產生臨時檔案的方法型別
- spring-boot-route(十六)使用logback生產日誌檔案Springboot
- Linux中的檔案種類Linux
- Linux中目標與檔案的編輯管理(詳細)Linux
- Linux 檔案與目錄Linux
- Linux或者國產OS下使用HHDESK進行檔案管理Linux
- 在Linux中,如何使用grep命令查詢檔案中的內容?Linux
- Linux中檔案的許可權Linux
- linux中的檔案描述符Linux
- linux與使用者賬號有關的系統檔案Linux
- Spring中如何為屬性配置檔案自動產生文件?Spring
- Linux中如何使用Aria2下載檔案Linux
- VMware複製檔案產生的快取路徑快取
- linux 中根據檔案的大小進行檔案的查詢Linux
- 在Linux中,如何使用logrotate命令管理日誌檔案?Linuxlogrotate
- 如何使用 Find 和 Locate 在 Linux 中搜尋檔案Linux
- 使用 split 命令分割 Linux 檔案Linux
- 如何使用git 生成patch 和打入patchGit
- linux每日命令(25):Linux檔案型別與副檔名Linux型別
- 詳解Linux指令與檔案的搜尋Linux
- Linux下檔案的壓縮與解壓Linux
- 在 Linux 中如何刪除檔案中的空行Linux
- linux 生產者與消費者問題Linux
- Linux與Windows共享檔案Samba(轉)LinuxWindowsSamba
- Linux檔案與目錄管理(2)Linux
- linux檔案與目錄管理命令Linux
- Linux中log檔案是什麼意思?Linux日誌檔案說明Linux
- webpack watch模式產生*.hot-update.json檔案Web模式JSON