zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/ArsenalfanInECNU/p/12486435.html
Copyright © 2011-2022 走看看