日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转] 用Diff和Patch工具维护源码

發布時間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转] 用Diff和Patch工具维护源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Unix系統下,維護源碼版本可以使用很多方法,其中最常用的當然是大名鼎鼎的CVS,但實際上,簡單的版本維護工作并沒有必要使用復雜的CVS等專門的版本維護工具,Unix標配中的diff和patch工具就完全可以完成代碼的簡單備份和升級工作。

diff以"行"為單位比較兩個文本文件(也可以是目錄比較),并將不同之處以某種格式輸出到標準輸出上;patch可以讀入這種輸出,并按照一定指令使源文件(目錄)按照目標文件(目錄)更新。Linux內核源碼就是按照這種方式保持更新的,我們在www.kernel.org上可以下載到最新內核的patch文件的bzip2包。本文以gnudiffutils 2.7和patch 2.5為例介紹diff和patch工具的使用。

1.diff

diff既可以用來比較兩個文件,也可以用來比較兩個目錄中每個文件。使用-r(--recursive)參數時還可以在目錄中嵌套比較。比較目錄時除比較同名文件外,對不同名的文件當成新文件處理。對于比較C程序文件,diff還提供了專門的參數(-p,--show-c- function)來標識不同之處所在的函數名。

diff的輸出格式有三種:列舉方式、命令模式和上下文模式,其中命令模式有分為兩種:ed命令格式和RCS(Revision Control System,版本控制系統)命令格式,上下文模式也按格式分為老版和新版兩種。看下面的例子就能基本清楚各個格式的區別:

命令格式記錄的是從test1更新到test2所需要執行的命令,而上下文模式通常可讀性更好一些,它所記錄的主要是二者的差異,通常還記錄所需修改部分的上下幾行(可配置)內容以供比較。見下面的例子:

新版格式較之老版要緊湊一些,Linux內核源碼的升級就是按照新版上下文格式用diff組織的,比如patch-2.4.16中所用的具體命令為:

diff -Nur linux-2.4.15 linux

參數N表示如果某個文件僅在一個目錄中出現,則假定其在另一個目錄中為空文件;u表示unified格式,r表示在目錄中嵌套使用,linux-2.4.15顯然是老核的目錄名,而linux則為新核的目錄名。


回頁首

2.patch

盡管并沒有指定patch和diff的關系,但通常patch都使用diff的結果來完成打補丁的工作,這和patch本身支持多種 diff輸出文件格式有很大關系。patch通過讀入patch命令文件(可以從標準輸入),對目標文件進行修改。通常先用diff命令比較新老版本,patch命令文件則采用diff的輸出文件,從而保持原版本與新版本一致。

patch的標準格式為

patch [options] [originalfile] [patchfile]

如果patchfile為空則從標準輸入讀取patchfile內容;如果originalfile也為空,則從 patchfile(肯定來自標準輸入)中讀取需要打補丁的文件名。因此,如果需要修改的是目錄,一般都必須在patchfile中記錄目錄下的各個文件名。絕大多數情況下,patch都用以下這種簡單的方式使用:

patch -p[num] <patchfile

patch命令可以忽略文件中的冗余信息,從中取出diff的格式以及所需要patch的文件名,文件名按照diff參數中的"源文件"、"目標文件"以及冗余信息中的"Index:"行中所指定的文件的順序來決定。也就是說,對于如下diff結果文件(Linux內核源碼 2.4.16升級包,部分):


diff -Nur linux-2.4.15/Makefile linux/Makefile
--- linux-2.4.15/Makefile Thu Nov 22 17:22:58 2001
+++ linux/Makefile Sat Nov 24 16:21:53 2001
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 4
-SUBLEVEL = 15
-EXTRAVERSION =-greased-turkey
+SUBLEVEL = 16
+EXTRAVERSION =
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
……

patch首先嘗試當前目錄(或者-d參數指定的目錄)下的linux-2.4.15/Makefile文件是否存在,如果不存在則試圖對linux/Makefile文件操作,僅當兩者都不存在時(或者設置了POSIXLY_CORRECT環境變量)才會讀取Index:的內容(此文件中沒有標識)。

前面提到的-p參數決定了是否使用讀出的源文件名的前綴目錄信息,不提供-p參數,則忽略所有目錄信息,-p0(或者-p 0)表示使用全部的路徑信息,-p1將忽略第一個"/"以前的目錄,依此類推。如/usr/src/linux-2.4.15/Makefile這樣的文件名,在提供-p3參數時將使用linux-2.4.15/Makefile作為所要patch的文件。

對于剛才舉的Linux內核源碼2.4.16升級包的例子,假定源碼目錄位于/usr/src/linux中,則在當前目錄為/usr /src時使用"patch -p0 <patch-2.4.16"可以工作,在當前目錄為/usr/src/linux時,"patch -p1<patch-2.4.16"也可以正常工作。

patch可以直接操作上下文格式以及混合ed格式的diff輸出文件,而將ed格式文件通過管道提交給ed程序操作(暫時不知RCS格式的文件如何處理)。


回頁首

3.配合使用diff和patch升級源碼

在此僅舉一個簡單的例子來說明如何用diff/patch工具維護源碼升級。

假設program-1.0目錄中為老版,現開發完成的新版位于program-2.0目錄中,將兩個目錄置于同一父目錄下,然后在該父目錄上執行:

diff -Nur program-1.0 program-2.0 >program-2.0.patch

將生成一個program-2.0.patch的補丁文件,發布該補丁文件(當然可以先壓縮成bzip2格式)。

假設拿到的是program-2.0.patch.bz2文件,則在program-1.0目錄同級執行:

bzcat program-2.0.patch.bz2 | patch -p0

如此即完成了從1.0到2.0的升級。

如果希望恢復到原版本,可以使用-R(--reverse)參數,但僅對上下文格式的diff文件有效。還有一個備份參數也可以使用,但簡單應用中,整個目錄備份可能更方便一些。

參考資料

  • Patch手冊頁
  • Diff手冊頁

關于作者

楊沙洲,目前在國防科技大學計算機學院攻讀軟件方向博士學位。您可以通過 pubb@163.net與他聯系。

轉載于:https://www.cnblogs.com/napoleon_liu/archive/2011/01/31/1948217.html

總結

以上是生活随笔為你收集整理的[转] 用Diff和Patch工具维护源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青娱乐国产在线视频 | 黄色1级大片 | 欧美xxxx性 | 岛国大片在线 | 亚洲欧美色视频 | 久久99精品久久只有精品 | 黄页av| 青青青手机视频在线观看 | 免费黄色网址在线观看 | 手机av中文字幕 | 韩国电影一区二区三区 | av免费视屏 | 麻豆乱淫一区二区三区 | 777午夜 | 国产精品815.cc红桃 | 就爱啪啪网 | 国产第56页 | 女同在线观看 | 婷婷亚洲五月色综合 | 男人天堂2020 | 97caop| 丝袜 亚洲 另类 欧美 重口 | 日韩五码电影 | 日本熟妇成熟毛茸茸 | 国产爆操视频 | 91片黄在线观看 | 奇米精品一区二区三区在线观看一 | 国产黄色视屏 | 黄色在线网 | 在线视频亚洲 | 久久久久久国产 | 成年人在线观看av | 天天艹av| 国产男女视频在线观看 | 床戏高潮做进去大尺度视频网站 | 17c一起操| 国产蜜臀在线 | 老鸭窝av在线 | 国产福利观看 | 国产日韩欧美二区 | 中文字幕av一区二区三区人妻少妇 | 精品人妻在线播放 | 国产真实生活伦对白 | 国产精品主播 | 色综合久久88色综合天天 | 亚洲日本不卡 | 爱爱网站视频 | 性喷潮久久久久久久久 | 国产精品无码AV无码国产 | 中文字幕婷婷 | 国产福利91精品一区二区三区 | 成人区人妻精品一区二区不卡视频 | 秘密的基地 | 香蕉网av| 一区二区三区视频免费看 | 综合精品久久 | 美女网站免费视频 | 精品久久久久久久久久久久久久久 | 91精品小视频 | 亚洲精品91天天久久人人 | 四虎毛片 | 日本性爱视频在线观看 | 天堂一二三区 | 波多野结衣办公室双飞 | 超碰国产在线观看 | 疯狂揉花蒂控制高潮h | 女人特黄大aaaaaa大片 | 久久久久久久久久久久久av | 免费不卡毛片 | 成人一区二区三区四区 | 四虎首页| 午夜看片在线观看 | 日韩伊人久久 | 国产精品亚洲一区二区三区在线观看 | 欧美日韩图片 | bbbbbxxxxx性欧美| 一区二区三区四区国产精品 | 无码人妻一区二区三区在线视频 | 久久亚洲网 | 国产黄色一区二区三区 | 国产电影一区在线观看 | www日韩欧美 | 亚洲一区日本 | 黄色免费网站在线观看 | 我看黄色一级片 | 狂躁美女大bbbbbb黑人 | 99精品国产99久久久久久97 | 亚洲免费黄色 | 日韩一区视频在线 | 91亚色视频在线观看 | 制服诱惑一区二区三区 | 精品人妻一区二区三区蜜桃视频 | 日韩有码在线播放 | 日本中文字幕在线视频 | 桃色网址| 影音先锋中文字幕在线视频 | 99久久久无码国产精品性波多 | 欧美一级一区二区三区 | 国产一区精品在线观看 |