Linux diff patch

简介: /***************************************************************************** * Linux diff patch * 声明: * 经常需要给代码打补丁,但是发现自己不会打补丁,经常看着补丁改代码,效率 * 那是一个低啊,不会就学学呗,反正patch有-R回退,不怕出错。
/*****************************************************************************
 *                            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. @@ 代表结束

 

目录
相关文章
|
8月前
|
算法 Shell Linux
【Shell 命令集合 文件管理】Linux diff 命令使用教程
【Shell 命令集合 文件管理】Linux diff 命令使用教程
141 0
|
5月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
131 2
linux笔记 diff及patch的制作与使用
|
Linux
【Linux命令200例】diff比较两个文件的差异
diff命令是Linux系统中的一个非常实用且常用的命令。它用于比较两个文件的差异,并输出不同之处的详细说明。diff命令可以帮助我们快速找出两个文件之间的差异,从而方便我们进行文件对比、合并和版本控制等操作。
943 0
|
8月前
|
Shell Linux 开发者
【Shell 命令集合 文件管理】Linux 补丁文件应用命令 patch命令使用指南
【Shell 命令集合 文件管理】Linux 补丁文件应用命令 patch命令使用指南
127 0
|
8月前
|
算法 Unix Linux
Linux|奇怪的知识| 不常用但非常有用的diff命令
Linux|奇怪的知识| 不常用但非常有用的diff命令
119 0
|
算法
11.Linux文件管理命令---diff比较两个文件
11.Linux文件管理命令---diff比较两个文件
147 0
|
Linux C语言
Linux系统之diff命令的基本使用
Linux系统之diff命令的基本使用
254 2
|
Linux
LINUX DIFF命令
diff命令本身很简单,需要注意的是要会阅读其输出。
142 0
|
Linux 开发工具 C语言
Linux下diff的操作详解
Linux下diff的操作详解
255 3
Linux下diff的操作详解
|
Unix Linux 开发工具
Linux Command diff 文件比较
Linux Command diff 文件比较
Linux Command diff 文件比较