使用diff和patch维护源码

1.diff的使用
    diff按照行比较两个文件(目录)的内容,输出它们之间的差异,而输出文件的格式可以被patch读取,所以可以使用patch来将新文件(目录)修改成旧文件(目录)或反之。
    diff有三种输出格式。
1.1.ed命令格式(参数-e)
    $diff -e test1 test2
      混合ed命令格式(无参数格式)
    $diff test1 test2
1.2.RCS命令简单格式(参数-f)
    $diff -f test1 test2
1.3.老版上下文格式(-c,--context)
    $diff -c test1 test2
      新版上下文格式(-u,--unified)
    $diff -u test1 test2
上下文格式是现在最常使用的格式,而且Linux内核源码的升级就是按照新版上下文格式用diff组织的,如
    $diff -Nur linux-2.4.15 linux
-N    表示如果某个文件只在一个目录中出现,就假定其在另一个目录中为空文件;
-u    表示unified格式
-r    表示目录嵌套使用
linux-2.4.15表示老目录,linux表示新目录。
最后,要用diff生成补丁文件,只需要使用重定向到一个.patch文件中就行了,当然.patch文件不是规定,而是一种约定。

2.patch的使用
    patch的标准格式为
$patch [options] [originalfile [patchfile]]
如果patchfile或origninalfile为空,则表示从标准输入读取,通常,patch最常用的格式是:
    $patch -p[num] <patchfile
patch命令可以忽略文件中的冗余信息,从中提取出diff的格式以及所需要patch的文件名。
-p[num]    表示要忽略的路径层数,-p0表示不忽略路径,-p1表示忽略第一个/之前的路径。这里最容易迷糊的是:这里说的路径不是什么补丁的路径,因为通常都是的补丁都是在当前目录下,而是说的是原来使用diff命令的层次和当前目录的层次,举例说明
在当前目录下现有文件(目录)如下:
test1/file1
test1/file2
test2/file1_1
这里发现test2目录下只有一个文件,在当前目录使用diff命令生成补丁
$diff -Nur test2 test1>test1.patch    test1目录表示新的
$cd test2
$patch -p1 <../test1.patch
这样就会打补丁整个test2目录,查看patch文件,可以看到diff命令执行的第一层目录为test2,所以这里使用-p1来忽略test2目录,因为我们当前已经处在test2目录下了!

 

最后,如果需要反向打补丁,则使用patch的-R参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值