- 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