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

一、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.
        1 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" );
        }
时间: 2024-10-10 21:36:19

Linux diff patch的相关文章

Linux之旅(1): diff, patch和quilt (下)

Linux之旅(1): diff, patch和quilt (下) 2 quilt 我们自己的项目能够用cvs或svn管理所有代码.但有时我们要使用其它开发人员维护的项目.我们须要改动一些文件,但又不能直接向版本号管理工具提交代码.自己用版本号管理工具重建整个项目是不合适的,由于大多数代码都是别人维护的,比如Linux内核.我们仅仅是想管理好自己的补丁.这时能够使用quilt. 2.1 基本概念 quilt是一个帮助我们管理补丁的程序.quilt的命令格式相似于cvs: quilt 子命令 [參

linux命令: patch

一. 针对单文件的patch: 我们以mkprj.sh.1和mkprj.sh两个文件为例: [[email protected] tst]# lsmkprj.sh.1  mkprj.sh 看两个文件的差异:[[email protected] tst]# diff mkprj.sh mkprj.sh.1 20,21c20< cd $workdir/fornew; mkdir crosstools kernel nfs_root uboot;< cd $workdir/farsight; mkd

video : Write and Submit your first Linux kernel Patch

http://v.youku.com/v_show/id_XNDMwNzc3MTI4.html After working with Linux (mostly as an advanced user) for years, I decided to post my first p=linux/kernel/git/x86/linux-2.6-tip.git;a=commitdiff;h=e19e074b1525d11a66c8e3386fec7db248ad3005" style="

Linux Submitting Patch

*/--> Linux Submitting Patch Table of Contents 1. Get the latest kernel source code from git. It is recommeded to use Torvalds's branch. 2. Create a new branch within git, in which the modification takes place. 3. Commit the changes. 4. Make patch wi

几个频繁使用的命令tar/diff/patch/grep/find简单使用

tar/diff/patch/grep/find使用频繁,记录下几个例子 1. tar可打包,解包,压缩,解压功能 打包压缩命令:tar czf project.tar.gz projectdir 或tar cjf project.tar.bz2 project 解压解包命令:tar xzf project.tar.gz 或tar xjf project.tar.bz2 2. diff用来比较文件,比较目录,制作补丁 制作补丁:diff -urNwB projectRaw projectCook

Linux基础之文本处理命令(wc,cut,sort,uniq,diff,patch)

我相信大家在使用Linux过程中总会遇到想要提取某些自己需要的信息的情况,比如如下这四种情况: 1.找出ifconfig命令结果中eno16777728的IPv4地址 2.查出分区空间使用率的最大百分比值 3.查出/tmp的权限,以数字方式显示 这个时候,我们使用命令当然也可以查看,不过还需要自己通过眼睛去过滤不需要的信息,多费劲.如何让自己更轻松的看到自己想看到自己想看的信息呢?今天的文本处理命令能满足我们的简单需求. wc 此wc非彼WC,在这里wc是word count的简写 wc - p

LINUX DIFF命令详解

刚才在和公司做离线IP对比,最后手工了,感觉还是比较麻烦的,遇到数据很大的时候不能手工进行了 本想用linux下的DIFF来进行对比,发现结果很乱.时间很紧最后还是手工了. 现在忙完要认认真真学习一下这个命令: 内容摘自网上: diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> diff就会告诉你,这两个文件有何差异.它的显示结果不太好懂,下面我就来说明,如何

linux diff 命令

diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的输出被称为补丁 (patch),因为Linux系统中还有一个patch程序,可以根据diff的输出将a.c的文件内容更新为b.c.diff是svn.cvs.git等版本控制工具不可或缺的一部分. 1.命令格式: diff[参数][文件1或目录1][文件2或目录2] 2.命令功能: diff命令能比较

几个重要的shell命令:diff patch tar find grep

diff diir_1.0/ dir_2.0/ -urNB > dir_2.0.patch u:union以合并的格式来输出文件的差异信息 r:递归的对比所有的子目录下的文件 U:将不存在的文件视为空文件 B:忽略空行引起的差异 ~/dir_1.0$ patch -p1< ../dir_2.0.patch -p1的意思是忽略补丁文件中的路径一级分量:比如补丁是在home目录生成的,home目录下有dir_1.0/ dir_2.0/两个目录. 打补丁的时候进入了dir_1.0/这个目录,我就需要