zoukankan      html  css  js  c++  java
  • 补丁(patch)文件

    补丁(patch):

    本质上是文件之间的一系列差异,这些差异能够被diff程序应用在源代码树上。通常用来修复源代码的一些漏洞,从而修复产品版本的缺陷。

    补丁分为两种:热补丁 和 冷补丁

    冷补丁在编译阶段将patch文件中的源代码打到已发布的release分支中。已经发布的relase分支代码不作任何修改,通过在源代码打上patch修复已知问题,然后进行编译并发布生成新版本。(要复位重启)

    热补丁通过工具,生成独立于老版本的可加载文件,通过在运行时动态替换老版本程序中的部分函数或库,达到修复问题的目的。(不复位重启)

    系统在内存中开辟了补丁区,热补丁是通过INS PATCH复合命令被直接放到补丁区,被激活运行,不需要复位。

    虽然热补丁方便,但是当热补丁无法解决遇到的问题时(如不是简单的改写函数就可以的,需要改写全局变量,内存中的代码段也重新改换,代码重新汇编),就需要冷补丁来解决。

    冷补丁会重新更换内存中的全局变量、代码段、补丁区,而这些又不能简单的改写就运行,必须通过复位来解决。

    打补丁的方式有两种:diff方式git方式

    diff方式:

    diff -Naur f1.txt f2.txt > my.patch # 生成补丁
    patch -p0 < my.patch # 应用补丁

    # 可以利用以上 f1.txt 和 my.patch 生成打了补丁的 f2.txt 文件。

    git方式:

    • 创建本地工作区

    git config --global user.email "tongyishu@qq.com"

    git config --global user.name "tongyishu"

    git init

    git add .

    git commit -m "first commit"

    • 修改代码,产生差异并提交

          git commit -m "patch_type:qq, desc:use for make patch"

    • 使用git format-patch创建patch

    指定commit之前的n个commit(含指定的commit) 

    git format-patch <commit-id> -n

    eg.

    git format-patch e948f6084f37ec4184ae45eca322698c1cf37e4e -3

     

    指定的单个commit

    git format-patch <commit-id> -1

    eg.

    git format-patch e948f6084f37ec4184ae45eca322698c1cf37e4e -1

     

    指定两个commit之间的所有commit 

    git format-patch <commit-id> <commit-id>

    eg.

    git format-patch e948f6084f37ec4184ae45eca322698c1cf37e4e 2a2fb4539925bfa4a141fe492d9828d030f7c8a8

    • 使用git apply应用patch

    检查patch能否正常应用

    git apply –check <xxx.patch>

     

    应用patch

    git apply <xxx.patch>

  • 相关阅读:
    MVC应用程序与单选列表
    jQuery UI的datepicker()与变更格式
    MVC应用程序,动态创建单选列表(RadioButtonList)
    MVC应用程序中,怎样控制与复制相同的功能
    为PartialView传递一个参数
    Nginx高并发性能优化
    Nginx上传和超时时间限制 (php上传限制)
    Nginx反向代理Tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
    Nginx域名访问的白名单配置
    日常运维中的一键安装或启停脚本
  • 原文地址:https://www.cnblogs.com/tongyishu/p/12411319.html
Copyright © 2011-2022 走看看