• 用diff命令生成Patch,用Patch命令打Patch


    最近遇到了git format-patch和git am不能正常工作的情况 用git format-patch打的patch无法用git am直接打,每次都有conflict,原因一直没有找到,只好找其他方法,在这个过程中,发现可以用diff命令生成patch,用patch命令打patch.

    1.为单个文件生成补丁

    1 $ diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.c > patch
    这条命令会产生类似如下的输出, 你将它重定向到一个文件中, 这个文件就是patch.
    1 diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800
    2 +++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800
    3 @@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)
    参数详解:
    -u 显示有差异行的前后几行(上下文), 默认是前后各3行, 这样, patch中带有更多的信息.
    -p 显示代码所在的c函数的信息.

    2.为多个文件生成补丁

    1 $ diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/ > patch
    这条命令对比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/两个目录下的所有源码差异.
    参数详解:
    -r 递归地对比一个目录和它的所有子目录(即整个目录树).
    -N 如果某个文件缺少了, 就当作是空文件来对比. 如果不使用本选项, 当diff发现旧代码或者新代码缺少文件时, 只简单的提示缺少文件. 如果使用本选项, 会将新添加的文件全新打印出来作为新增的部分.

    3.打补丁

    生成的补丁中, 路径信息包含了diff生成patch时目录的名称, 但其他人目录可能是其它名字, 所以, 打补丁时, 要进入要打的代码目录, 并且告诉patch工具, 请忽略补丁中的路径的第一级目录(参数-p1).
    1 $ patch -p1 < patch1.diff
    diff命令必须在整个Linux源码的根目录的上一级目录中执行.

    4. 示例

    给修改过的内核生成patch,然后用生成的patch给未修改过的内核打补丁
    其中,目录linux-2.6.31.3为未修改过的内核,目录linux-2.6.31.3_1为修改过的内核
    1 $ diff -uprN linux-2.6.31.3 linux-2.6.31.3_1/ > mypatch
    2 $ cd linux-2.6.31.3
    3 $ patch -p1 < mypatch

    注意点

    1. 打patch时,参数-p1, 是1而不是l. 为什么忽略第一级目录,因为工程的下面树状结构相同,但是工程名未必相同,所以打patch时候可以通过p1来避免这个问题。这个可以通过查看patch内容来决定具体执行patch的路径。

    2. 参数-p1的1代表忽略1级目录,如果参数为-p2就忽略2级目录,以此类推。拿4中的示例为例,diff -upRn后面是直接跟的两个发生修改的目录文件件,所以打patch时参数为-p1就可以。如果目录文件夹前面有2个相同的path,那么参数就需要改为-p3了

    参考链接:Linux下生成patch和打patch https://www.cnblogs.com/aaronLinux/p/5860552.html

  • 相关阅读:
    c# linq.Where+Func<object,bool>筛选数据
    【转】深入线程安全容器的实现方法
    c# 泛型+反射
    c# List<接口>小技巧
    winfrom的右击菜单项事件中如何获取关联控件的引用
    ASP.NET 1.0
    让包含GridView的div或panel的滚动条自己拉到底部怎么做?
    微软的IE中调试JavaScript的工具下载链接
    ASP.NET调试启动默认浏览器如何设置
    C# WinForm的PictureBox控件图片的拉伸或收缩方式跟随着控件的大小
  • 原文地址:https://www.cnblogs.com/ArsenalfanInECNU/p/12486435.html
Copyright © 2020-2023  润新知