• 09 diff patch quilt


    1. diff

    按行比较两个文件的差异
    参数:

    diff [命令行选项] 原始文件目录 新文件目录
    
    -p  :   在每一个更改处显示c函数
    -u  :  按照统一格式输出(默认3行)
    -N  :  对于不存在的文件,认为是空白文件或者新增文件
    -r  :  递归
    -a  :  所有文件都视为文本文件逐行比较
    
    常用 -uparN
    

    eg:

    diff -Nuarp a b > different.patch
    

    2. patch

    参数

    -f  :   强制打入补丁
    -pN :   滤过N层前导目录
    -E  :  打完补丁后,如果文件内容为空,将其删除
    -d  :   表示在指定目录下执行
    -R  :  这个选项用于删除补丁
    --dry-run   :  试打入,输出打入这个补丁的结果。但不做任何修改
    

    eg:

    去掉patch文件中路径的第一个元素

    patch -p1 < ../different.patch
    

    3. quilt(不常用)

    quilt同意具有生成补丁的应用补丁的功能。相对于diffpatch而言,它还具有管理补丁的功能。quilt的管理结构类似于堆栈,先入后出这样。
    还需要注意的是quilt是在源代码中生成一个patches目录,将补丁存在在目录中。所有quilt refresh之后需要update

    3.1 基本用法

    • sudo apt-get install quilt
    • quilt top 查询最后一个提交
    • 应用补丁(压栈)
      quilt push -a 应用所有
      quilt push 013-redirect-all-traffic.patc 应用001->013
      quilt push应用单个
    • 取消应用(出栈)
      quilt pop -a 取消所有
      quilt pop 002-helloworld.patch 从栈顶取消到02
      quilt pop取消单个
    • 创建新补丁
      quilt new xxx.patch
    • 添加修改文件(记录文件初始状态)
      quilt add xxx
      当文件被修改完成后,只需要quilt refresh刷新一下,此命令会去保存
    • 查询当前补丁中被修改的文件
      quilt files
    • 查询修改点
      quilt diff

    3.2 openwrt中的使用

    3.2.1 添加新补丁

    1. make package/example/{clean,prepare} V=s QUILT=1
      对于主机端包make package/example/host/{clean,prepare} V=s QUILT=1解压出补丁
    2. cd build_dir/target-*/example-* 到目的文件
    3. quilt push -a 应用所有补丁(入栈)
    4. quilt new 010-main_code_fix.patch 新建一个补丁
    5. quilt edit src/main.c 将编辑文件与新建文件建立关联
    6. quilt diff 可选
    7. quilt refresh
    8. make package/example/update V=s 将补丁文件移到到buildroot
    9. make package/example/{clean,compile} package/index V=s

    3.2.2 修改现有补丁

    1. make package/example/{clean,prepare} V=s QUILT=1
      对于主机端包make package/example/host/{clean,prepare} V=s QUILT=1解压出补丁
    2. cd build_dir/target-*/example-* 到目的文件
    3. quilt series 列出可供修改的补丁
    4. quilt push 010-main_code_fix.patch 修改补丁
    5. quilt edit src/main.c 将编辑文件与补丁文件建立关联
    6. quilt diff 可选
    7. quilt refresh
    8. make package/example/update V=s 将补丁文件移到到buildroot
    9. make package/example/{clean,compile} package/index V=s
  • 相关阅读:
    对单片机存储分配新的认识
    超简单的word转swf 实现
    纯真IP数据库
    webservice 特殊字符处理
    QQ输入法导致win8 x64 装不上vs11,打不开记事本,等各种变态问题
    时间戳转换
    Remote Desktop Organizer 1.4.5
    Xcdoe 4.6 dbank下载
    链接复用
    Visual Studio 2012 序列号
  • 原文地址:https://www.cnblogs.com/burnk/p/15810457.html
Copyright © 2020-2023  润新知