Linux diff patch

/*****************************************************************************
 *                            Linux diff patch
 * 声明:
 *     经常需要给代码打补丁,但是发现自己不会打补丁,经常看着补丁改代码,效率
 * 那是一个低啊,不会就学学呗,反正patch有-R回退,不怕出错。
 *
 *                                      2015-12-28 深圳 南山平山村 曾剑锋
 ****************************************************************************/

                    \\\\\\-*- 目录 -*-//////
                    |  参考文章:
                    |  一、cat main1.c
                    |  二、cat main2.c
                    |  三、execute diff:
                    |  四、execute patch:
                    |  五、patch back:
                    -----------------------

参考文章:
    1. 用Diff和Patch工具维护源码
        http://www.ibm.com/developerworks/cn/linux/l-diffp/index.html
    2. diff和patch使用指南
        http://www.cnblogs.com/cute/archive/2011/04/29/2033011.html
    3. 补丁格式 diff patch
        http://blog.sina.com.cn/s/blog_51cea4040101atql.html

一、cat main1.c
    #include <stdio.h>

    int main( int argc, char **argv )
    {
        printf( " zengjf test for diff and patch.\n" );
    }

二、cat main2.c
    #include <stdio.h>

    int main( int argc, char **argv )
    {

        printf( " zengjf test for diff and patch.\n" );
    }

三、execute diff:
    1. $: diff -Nur main1.c main2.c > main.patch
    2. 在当前目录下生成了main.patch文件:
        --- main1.c    2015-12-28 20:36:49.388152208 +0800
        +++ main2.c    2015-12-28 20:25:17.376180914 +0800
        @@ -2,5 +2,8 @@

         int main( int argc, char **argv )
         {
        +
        +
        +
             printf( " zengjf test for diff and patch.\n" );
         }

四、execute patch:
    1. 当前目录下有:main1.c main2.c main.patch
    2. cat main1.c
        #include <stdio.h>

        int main( int argc, char **argv )
        {
            printf( " zengjf test for diff and patch.\n" );
        }
    3. $: patch -p0 < main.patch                                    <right>
        patching file main1.c
    4. cat main1.c
        #include <stdio.h>

        int main( int argc, char **argv )
        {

            printf( " zengjf test for diff and patch.\n" );
        }
    5. $: patch p0 < main.patch                                     <error>
        patching file p0
        Hunk #1 FAILED at 2.
out of hunk FAILED -- saving rejects to file p0.rej
    6. $: patch -p1 < main.patch                                    <error>
        can't find file to patch at input line 3
        Perhaps you used the wrong -p or --strip option?
        The text leading up to this was:
        ----------------------------------
        |--- main1.c     2015-12-28 20:36:49.388152208 +0800
        |--- main2.c     2015-12-28 20:25:17.376180914 +0800
        ----------------------------------
        File to patch: <cursor>
    7. $: patch -p0 main.patch                                      <error>
        ^C

五、patch back:
    1. 当前目录下有:main1.c main2.c main.patch
    2. cat main1.c
        #include <stdio.h>

        int main( int argc, char **argv )
        {

            printf( " zengjf test for diff and patch.\n" );
        }
    3. $: patch -p0 -R < main.patch
        patching file main1.c
    4. cat main1.c
        #include <stdio.h>

        int main( int argc, char **argv )
        {
            printf( " zengjf test for diff and patch.\n" );
        }

六、实例分析:
    1. patch 部分内容:
        diff --git a/proguard.flags b/proguard.flags
        index 6d41d17..ffbc39a 100644
        --- a/proguard.flags
        +++ b/proguard.flags
        @@ -11,4 +11,4 @@
         -keep class com.android.settings.MasterClearConfirm
         -keep class com.android.settings.accounts.*
         -keep class com.android.settings.fuelgauge.*
        -
        +-keep class com.android.settings.ethernet.*
    2. 解析:@@ -11,4 +11,4 @@
        1. @@ -表示代表a/proguard.flags文件;
        2. 11代表下面显示的代码是从a/proguard.flags文件的第11行开始;
        3. 4代表a/proguard.flags被操作了;
        4. +代表b/proguard.flags文件
        5. 11代表下面显示的代码是从b/proguard.flags文件的第11行开始;
        6. 4代表b/proguard.flags被操作了;
        7. @@ 代表结束

 

时间: 2024-09-29 21:16:54

Linux diff patch的相关文章

Linux下Patch的应用和制作方法介绍

Linux下Patch的应用和制作方法介绍 因为在u-boot移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了.制作补丁可以解决这个问题. 学习资料的收集比较简单,方法一类似于这种初级问题网上资料非常丰富,google或者baidu搜索一下,然后选择有价值的资料,方法二是阅读man在线文档.完成收集工作,当然最终要在自己的Linux上作实验,比较总结,消化吸收为自己的东西.要除去这么一种错误思想:一定要学全.要知道,一次学全是不可能的,只能先学习最为常用的,在以后不断实践的过程中

生成补丁 与 打补丁 diff patch

有两个目录 每个目录中有一个相同名字的文件  但是内容 是些地方有差别,我们以此来做实验 验证diff patch 这两个命令 目录1:/you 包含file.c 这个文件比下面的file.c文件 多了一段代码 模仿我们在更新文件时 在源文件上做的修改 ////////////////////// #include "delegation.h" static int nfs_lock(struct file_lock *fl) {     int ret = -ENOLCK; } st

举例说明Linux diff 命令

在比较文件的时候,通常会用基于GUI的软件.很少有人真正会为了这个目的使用命令行工具.虽然说使用命令行来比较文件/目录并不像一件小事儿那样容易,但是如果你是一个Linux使用者,那么我想你应该知道如何通过命令行比较文件,因为一旦使用了它,你会认为它绝对是一个快速的方法. 在本篇中,我们将通过一些实例来学习如何使用diff命令. Linux diff 命令 让我们通过一些实际的例子理解diff命令. 假设我们有两个文件(file1 和 file2): $ cat file1 Hi, Hello,

Linux中patch命令的使用

下面我们来揭示一下Linux中patch命令的使用技巧. 语法是patch [options] [originalfile] [patchfile] 例如: patch -p[num] <patchfile -p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个"/"以前的目录,依此类推.如/usr/src/linux-2.4.16/Makefile 这样的文件名,在提供-p3 参数

浅谈硬实时Linux(RT-Preempt Patch)在PC上的编译、使用和测试

Vanilla kernel的问题 Linux  kernel在spinlock.irq上下文方面无法抢占,因此高优先级任务被唤醒到得以执行的时间并不能完全确定.同时,Linux  kernel本身也不处理优先级反转.RT-Preempt  Patch是在Linux社区kernel的基础上,加上相关的补丁,以使得Linux满足硬实时的需求.本文描述了该patch在PC上的实践.我们的 测试环境为Ubuntu 10.10,默认情况下使用Ubuntu 10.10自带的kernel: barry@ba

diff and patch

 转两篇diff和patch的文章, 打补丁相关.第一篇 :  情景一:你正尝试从代码编译一个软件包,发现有人已经对代码进行了小小的修改以便在你的系统上编译.他们通过补丁的方式发布自己的成果,但是你却不知道该如何使用它.答案是你使用一个叫做patch(很贴切)的命令行工具将补丁应用到原始代码上.  情景二:你下载了一个开源软件包的代码,花了一个小时左右稍作修改,成功的让它在你的系统上编译通过.你想把自己的成果分享给其他程序员,或者给软件包的作者.现在你就需要创建自己的补丁,你需要的工具是diff

详解Linux patch命令参数及用法_Linux

说到patch命令,就不得不提到diff命令,也就是制作patch的必要工具.diff命令,在制作patch文件的时候,基本上只需要使用到diff -Nau 这个参数,如果比较的是文件夹,还要加上-r参数,所以一般直接使用Naur参数. 功能说明:修补文件. 语 法:patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>][-F <监别列数>][-g <控制数值>][-i <修

Linux patch命令详解 Linux patch命令怎么用

patch指令让用户利用设置修补文件的方式,修改,更新原始文件.倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行.如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一. 语法 patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>] [-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][

汇总:Linux文件管理的50个命令

1.Linux cat命令 cat 命令用于连接文件并打印到标准输出设备上. 2.Linux chattr命令 Linux chattr命令用于改变文件属性. 3.Linux chgrp命令 Linux chgrp命令用于变更文件或目录的所属群组. 在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理.您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可. 4.Linux chmod命令 Linux/Unix 的文件调用权限分为三级 : 文件拥有