Linux下建立 code diff 和 合并 patch

Linux 下常常须要给别人提供 patch 以及合 patch,这时须要用到 Linux 的 diff 和 patch 命令。linux

1. diff 命令bash

  diff 命令经常使用来比较文件、目录,也能够用来制做补丁文件。所谓 “补丁文件” 就是 “修改后的文件” 与 “修改前(原始文件) ” 的差异。spa

  经常使用选项以下:blog

  1. “-u” : 表示在比较结果中输出上下文中一些相同的行,这有利于人工定位。递归

  2. “-r” :表示递归比较各个子目录下的文件。文档

  3. “-N”:将不存在的文档当作空文件。class

  4. “-w”:忽略对空格的比较。下载

  5. “-B” :忽略对空行的比较。di

EX:假设 linux-2.6.22.6 目录中是原始的内核,linux-2.6.22.6_ok 目录中是修改过的内核,能够使用如下命令制做补丁文件 linux-2.6.22.6_ok.diff (原始目录在前,修改过的目录在后)。文件

$ diff -urNwB  linux-2.6.22.6  linux-2.6.22.6_ok > linux-2.6.22.6_ok.diff

  因为 linux-2.6.22.6 是标准的代码,能够从网上自由下载。要发布 linux-2.6.22.6_ok 中所作的修改时,只须要提供补丁文件 linux-2.6.22.6_ok.diff (一般文件很小)。

 

2. patch 命令

  patch 命令被用来打补丁 -- 就是依据补丁文件来修改原始文件。好比对于上面的例子,能够使用如下命令将补丁文件 linux-2.6.22.6_ok.diff 应用到原始目录 linux-2.6.22.6 上去。假设 linux-2.6.22.6_ok.diff 和 linux-2.6.22.6 位于同一目录下。

$ cd linux-2.6.22.6
$ patch  -pl < ../linux-2.6.22.6_ok.diff

  patch 命令中最重要的选项是 “-pn”:补丁文件中指明了要修改的文件路径,“-pn” 表示忽略路径中第n 个斜线以前的目录。

  假设 linux-2.6.22.6_ok.diff 中有以下几行:

diff -urNwB  linux-2.6.22.6/A/B/C.h  linux-2.6.22.6_ok/A/B/C.h
- - -  linux-2.6.22.6/A/B/C.h 2007-08-31 02:21:01.00000000  -0400
+++ linux-2.6.22.6_ok/A/B/C.h 2007-09-20 18:11:46.00000000  -0400
......

  使用上述命令打补丁是,patch命令依据 “linux-2.6.22.6/A/B/C.h ”,寻找源文件,“ -p1 ” 表示忽略第1个斜线以前的目录,

  因此要修改的源文件是当前目录下的:

 A/B/C.h
相关文章
相关标签/搜索