补丁工具Quilt与Git

文章目录

  • Quilt
    • 使用场景
      • 不好
    • 操作(基本)
    • 操作(高级)
    • 流程
      • 以OpenWrt - strongSwan为例:
  • Git
    • 使用场景:
    • 操作
  • 鸣谢

常用补丁工具操作及适用场景,不仅限于Linux/OpenWrt。

Quilt

网上教程几乎看不到(估计是这个工具的名字不太好,冲突了),补丁生成后会在Makefile目录下生成patches目录,用于存放quilt格式补丁文件。
$ ls feeds/packages/strongswan
files Makefile patches

使用场景

  • 源码使用quilt打补丁,那就照着套路来,继续用quilt;

  • 对已打包好的源码包进行二次开发(不解包无法看到源码全貌),如:

    • Linux内核
    • OpenWrt中feeds目录下的绝大部分第三方软件包

  • 省去手动解包打包流程
  • 只是在源码包的基础上进行修改,patch默认置于外部,也就无需重新回填MD5校验值(Makefile)
  • 回滚操作简单

不好

  • 修改权限不能(644->755)
  • 每次都需要先quilt push -a,略麻烦
  • 同时修改多个旧补丁文件,容易引发冲突(简单的办法是只管往上叠,后面再合并旧的)

操作(基本)

  • 安装
    sudo apt-get install quilt

  • 查看最近的补丁(最后一个)(初始为空)
    quilt top

  • 应用补丁(压栈)

    • 所有:quilt push -a
    • 到指定位置:quilt push 013-redirect-all-traffic.patch(001->013)
    • 单个:quilt push
  • 取消应用(弹栈)(回滚)

    • 所有:quilt pop -a
    • 到指定位置:quilt pop 002-helloworld.patch(013->002)
    • 单个:quilt pop
  • 创建补丁
    quilt new xxx-new-page-about-patch-tools.quilt

  • 添加欲修改文件(记录下文件初始状态)
    quilt add README.md

  • 修改,开发
    quilt edit README.md
    你不一定要用quilt edit来对文件进行修改,edit只是调取外部编辑器供用户编辑,完后quilt再自动与初始副本进行比较,得出差异项(patch),于是乎:
    你可以使用其它喜欢的编辑器(Sublime/gVim/VsCode…)来编辑,保存后只需来一句:quilt refresh
    (常用如scp/sftp,远程编辑)

  • 保存为patch
    quilt refresh

  • 查看当前补丁中已修改文件
    quilt files

  • 已修改(当前补丁)
    quilt diff

操作(高级)

Debian Wiki - UsingQuilt

流程

以OpenWrt - strongSwan为例:

  1. 准备环境,释放代码,准备补丁库
    make package/feeds/packages/strongswan/{clean,prepare} V=s QUILT=1
  2. 切换至临时开发目录
    cd build_dir/target*/strongswan*/
  3. 打补丁
    应用所有
    quilt push -a
    应用部分
    quilt push XXX-redirect...patch
    撤销补丁
    quilt pop XXX-redirect...patch
    撤销所有
    quilt pop -a
    当前补丁
    quilt top
  4. 新增补丁或编辑旧补丁
    quilt new xxx-*.patch
  5. 添加追踪
    quilt add xxx.c
  6. 编辑
    quilt edit xxx.c
  7. 确认修改(可选)
    quilt files && quilt diff
  8. 保存修改
    quilt refresh
  9. 回到主目录,将补丁从临时开发目录更新至补丁库(Makefile同级patches)
    cd ../../../ && make package/feeds/packages/strongswan/update V=s
  10. 重新编译
    make package/feeds/packages/strongswan/{clean,compile} V=s

V=s相当于Verbose,输出详细log

Git

教程多,主流
理解原理才能有效避免合并冲突
廖雪峰Git教程 - 分支管理

使用场景:

  • 使用git clone的代码
  • 使用git进行代码管理的软件
  • 完整代码可直接浏览(与quilt相反)

操作

Git Daily

鸣谢

前同事,他姓黄
给LuCI挖的坑
OpenWrt交叉编译环境

你可能感兴趣的:(openwrt)