學習patch命令打補丁,diff命令製作補丁

  • patch:通過補丁文件,來對原文件打補丁

  • diff:      比較兩個文件,然後生成一個補丁文件


1.patch用法  

 patch -p[剝離層級]  <[補丁文件]

2.patch命令示例

cd u-boot-1.1.6/  //進入原文件目錄      
patch -p1  <../u-boot-1.1.6_jz2440.patach   
//"p"    表示去掉補丁文件里路徑的第幾部分。"1",表示去掉第1個
//"<"    指補丁文件位置
// "../" 表示返回上一個目錄,因爲這補丁文件和原文件在同一目錄下

爲什麼需要輸入-p1?

如下圖所示,可以看到補丁文件裏,每個需要改的文件,都有u-boot-1.1.6目錄,而我們之前已經cd進入了,所以需要輸入-p1,去掉它

3.patch文件內容補充

diff -urN u-boot-1.1.6/common/cmd_bootm.c u-boot-1.1.6_jz2440/common/cmd_bootm.c
//綠色代表原文件名以及文件地址,紅色代表打上補丁後的新文件名以及地址
--- u-boot-1.1.6/common/cmd_bootm.c    2006-11-02 22:15:01.000000000 +0800
+++ u-boot-1.1.6_jz2440/common/cmd_bootm.c    2010-11-26 12:54:38.150155640 +0800
//--- 對文件裏代碼刪減     +++ 對文件裏代碼添加
@@ -318,5 +318,5 @@                        
//-318,5 表示在原文件裏第318行內有刪減,接下來顯示5段。+318,5同樣類似                                                  
//第318行,第一段
   switch (hdr->ih_comp) {                        //第319行,第二段
    case IH_COMP_NONE:                            //第320行,第三段
-        if(ntohl(hdr->ih_load) == addr) {         //第321行,刪減第四段
+        if(ntohl(hdr->ih_load) == data) {         //第322行,增加第五段

4.diff常用參數  

  • -u: 表示在比較結果中輸出上下文中一些相同的行,這有利於人工定位

  • -r:  表示遞歸比較各個子目錄下的文件

  • -N“:將不存在的文件當作空文件

  • -B: 忽略對空行的比較

5.diff命令示例

 diff -urN   u-boot-2012.04.01   u-boot-2012.04.01_new > u-boot-2012.04.01_new.patch             
//u-boot-2012.04.01:原文件            
//u-boot-2012.04.01_new:修改後的新文件

當一個文件有多個補丁需要打,則使用for循環批處理命令

比如,在tmp/目錄下打上../patches/目錄下的所有補丁文件:

cd tmp/
for file in ../patches/*.patch; do patch -p1 < $file; done

原文:https://www.cnblogs.com/lifexy/p/7009706.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章