zoukankan      html  css  js  c++  java
  • quilt

    1 什么是quilt

    quilt是一个patch管理工具,特别适合于对多个patch进行管理。

    quilt是基于gnu patch和diff的。

    2 使用quilt创建一个patch

    第一步,quilt new xxx.patch,创建一个patch文件。

    第二步,quilt edit xxx

                quilt edit xxx

                ......

    进行各种修改,这些修改将会放在上面创建的patch中。

    或者,quilt add xxx,然后直接去修改xxx文件即可。

    第三步,quilt refresh

    将修改写入patch文件中。

    3 已经有了patch,打补丁

    原工程目录结构和补丁分别应该放在哪里,另外,quilt push命令要在哪里执行?

    关键是.pc和patches目录

    所有的patch都放在patches这个目录下。

    这个patches目录可以用QUILT_PATCHES环境变量来指定。

    .pc目录放在patches同级目录即可。

    这样quilt就可以找到patches了,quilt push在任何地方都可以执行。

    4 关于series文件

    这文件一行是一个patch,前面的patch先打,后面的后打。

    5 quilt upgrade

    因为其它人用的quilt的版本可能更高,所以,在执行quilt命令前先upgrade一下比较好。

    6 打补丁的时候,quilt如何知道该patch是打给哪个文件的

    打补丁的时候,是patch在打,首先,这个跟当前的工作目录有关,patch会去当前的工作目录下找要打patch文件,也就是说,patch的目标文件。查找目标文件是相对于当前目录而言的。

    然后,还有一个-pN参数和patch文件头路径,比如“linux/Makefile”,如果是-p0,那么直接在当前工作目录下找linux文件夹,然后找linux文件夹下的Makefile文件。如果是-p1,那么直接在当前工作目录下找Makefile文件,也就是说,p1话,会丢掉patch文件头路径的第一个“/”及其之前的路径。同理,pN会丢掉第N个“/”及其之前的路径。

    而,quilt在series文件中可以指定该patch的-pN,比如patchRp0.diff -p0,这样quilt就告诉patch,该patch使用-p0。如果在series文件中不指定-pN,quilt默认的是-p1。

    所以,信息来自三个地方:第一,当前工作目录;第二,patch文件的头路径;第三, -pN,来自serires文件或者默认。

    7 同一个文件被修改了多次,有多个patches,这些patches的行号是如何同最终的文件对应上的?

    同一个文件有多个patches时,是按照顺序来打patch的,original文件,先打patch1,变成了orignal+patch1文件,然后在这个文件的基础上打patch2,依次类推。

    patch前面的编号,在patch的context格式下,意思不大,它只是提供一个初始定位。当在原始文件中,没有定位到整个context时,patch会弄向前向后偏移去继续定位context。如果还没有找到,它会把context前后减一行,然后继续定位。还没有找到,把context减二行继续定位,还是找不到,返回error,失败。只要找到了,就会打patch。这也是为什么contex格式下,patch的每个hunk前后都有原文件的三行。

  • 相关阅读:
    随机生成密码
    vue 仿新闻项目笔记
    vuex 随笔
    SourceTree
    vue npm,Git随笔
    谷歌浏览器如何去掉自动填充的背景色
    hold 命令
    ind2vec和vec2ind函数
    稀疏矩阵(sparse matrix)
    第五篇 学习OpenCV之视频处理
  • 原文地址:https://www.cnblogs.com/hustdc/p/7291804.html
Copyright © 2011-2022 走看看