zoukankan      html  css  js  c++  java
  • linux下与git打补丁

    一、LINUX下生成补丁,与打补丁

    说到patch命令,就不得不提到diff命令,也就是制作patch的必要工具。diff命令,在制作patch文件的时候,基本上只需要使用到diff -Nau 这个参数,如果比较的是文件夹,还要加上-r参数,所以一般直接使用Naur参数。

    比较两个文件:diff -y a.txt b.txt
    比较文件并生成补丁:diff -Nau a.txt b.txt > xxx.patch
    比较目录并生成补丁:diff -Naru a b > xxx.patch (不管比较文件还是目录可直接使用这个)

    patch命令里面的层数(-p0?-p1?)
    参数-p来指定从第几层开始比较。比如有一个patch文件的补丁头是这样的:

    代码:
    --- old/modules/pcitableMon +++ new/modules/pcitableTue
    p0:就表示从当前目录,找一个叫作new的目录,在它下面找一个叫modules的目录,再在它下面找一个叫pcitableMon的目录。

    p1:就表示忽略第一层,从当前目录找一个叫modules的目录,在它下面找一个叫modules的目录。这样会忽略掉补丁头提到的new目录。依此类推

    打补丁举例:
    diff -uN old-file new-file >new.patch
    把生成的new.patch给到别人
    patch -p0 < new.patch //此时别人这边的old-file打上补丁后就和你这边最新的new-file一致。

    1、处理单个文件补丁的方法:
    产生补丁
    diff -uN old-file new-file >new.patch
    打补丁
    把生成的new.patch给到别人
    patch -p0 < new.patch //此时别人这边的old-file打上补丁后就和你这边最新的new-file一致。

    取消补丁
    patch -RE -p0 < new.patch //恢复打补丁之前的状态

    2、对整个文件夹打补丁的情况:
    产生补丁
    diff -uNr from-docu to-docu >to-docu.patch
    打补丁
    cd to-docu
    patch -p1 < to-docu.patch
    取消补丁
    patch -R -p1 注,冲突:
    .orig 合并前文件备份。
    .rej 文件里是冲突没合入的内容。

    二、GIT补丁

    2.1、生成适用git类型的patch补丁使用git format-patch生成所需要的patch,(推荐只适用于git的patch包含diff信息,包含提交人,提交时间等

    当前分支所有超前master的提交:
    git format-patch -M master

    某次提交以后的所有patch:
    git format-patch 4e16 --4e16指的是commit名

    从根到指定提交的所有patch:
    git format-patch --root 4e16

    某两次提交之间的所有patch:
    git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称

    某次提交(含)之前的几次提交:
    git format-patch –n 07fe --n指patch数,07fe对应提交的名称
    故,单次提交即为:
    git format-patch -1 07fe

    生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;
    如果指定了--stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o

    指定patch的存放目录;
    git format-patch

    2.1、生成diff类型补丁(生成标准的patch,只包含diff信息)
    git diff 【commit sha1 id】 【commit sha1 id】 > 【diff文件名】
    https://blog.csdn.net/wq6ylg08/article/details/88798254

    2.2、打补丁

    git apply
    检查patch/diff是否能正常打入:
    git apply --check 【path/to/xxx.patch】
    git apply --check 【path/to/xxx.diff】

    打入patch/diff(需要重新commit):
    git apply 【path/to/xxx.patch】
    git apply 【path/to/xxx.diff】

    git am(会自动commit)
    git am 可以一次合并一个文件,或者一个目录下所有的patch(且会自动提交)如参考中的举例:
    git am 001 - xxx.patch(一次打一个文件)
    git am path/*.path(一次性打多个文件)

    参考:

    Git打补丁参考:
    https://blog.csdn.net/u012701023/article/details/82984026?utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.control

    https://zhuanlan.zhihu.com/p/50742897?utm_source=wechat_session

    https://www.jianshu.com/p/ec04de3f95cc?utm_source=oschina-app

    -------------------------------------- 适合自己的才是最好的!-----------------------------------------
  • 相关阅读:
    c语言命名规则 [转载]
    [转贴]C编译过程概述
    [转贴]漫谈C语言及如何学习C语言
    Semaphore源码分析
    如何快速转行大数据
    web前端到底怎么学?
    Code Review怎样做好
    SDK与API的理解
    分析消费者大数据
    程序员的搞笑段子
  • 原文地址:https://www.cnblogs.com/retry/p/14661414.html
Copyright © 2011-2022 走看看