zoukankan      html  css  js  c++  java
  • 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.
    " );
        }
    
    二、cat main2.c
        #include <stdio.h>
        
        int main( int argc, char **argv ) 
        {
        
        
        
            printf( " zengjf test for diff and patch.
    " );
        }
    
    三、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.
    " );
             }
    
    四、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.
    " );
            }
        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.
    " );
            }
        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.
    " );
            }
        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.
    " );
            }
    
    六、实例分析:
        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. @@ 代表结束
  • 相关阅读:
    1+X云计算(中级) 单节点部署应用商城系统(gpmall)
    1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法
    1+X云计算平台运维与开发(中级)eNSP A~E卷 试题+答案
    vi&vim 基本使用方法
    yum针对软件包操作的常用命令
    本地yum源配置
    SpringCloud微服务初体验
    SpringBoot自定义注解拦截器,实现登录token验证
    MySQL建立SSL连接问题,设置useSSL=false显式禁用SSL,或者设置useSSL=true
    TPL事务
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5084040.html
Copyright © 2011-2022 走看看