patch 命令:补丁的应用

ops/2024/9/24 7:39:45/

一、命令简介

diff​ 和 patch​ 是传统的文件比较和应用差异的工具,而 git​ 是一个更现代、功能更全面的版本控制系统,它内置了 diff​ 和 patch​ 的功能,并且提供了更多用于代码管理和协作的高级特性。

diff, patch 和 git 之间的关系

  • 差异生成git​ 使用 diff​ 算法来生成提交之间的差异。这些差异可以用来创建补丁或查看更改。
  • 补丁应用:虽然 git​ 可以生成差异,但它通常不需要 patch​ 工具来应用这些差异,因为 git​ 自身就有合并和 cherry-pick 的功能。但是,git​ 可以接受通过 patch​ 工具创建的补丁文件。
  • 互操作性:你可以使用 git diff​ 命令生成标准的 diff​ 文件,这个文件可以被 patch​ 工具使用。同样地,你也可以使用 git apply​ 命令来应用 .patch​ 文件,这是 patch​ 命令的 git​ 版本。

二、命令参数

patch [选项] [原始文件] [补丁文件]

选项和参数

  • 选项

    • -pN​:指定要去掉的文件名前缀级别。
    • -b​:对原始文件进行备份。
    • -R​:撤销先前应用的补丁。
    • -i​:交互式模式,允许用户进行交互式操作。
  • 参数

    • [原始文件]​:要应用补丁的原始文件。
    • [补丁文件]​:包含要应用的更改的补丁文件。

三、命令示例

生成补丁

假设:文档 v1 是旧存档,v2 是新存档。内容如下

% cat v1
版本 v1
内容 hello world
谢谢阅读% cat v2
版本 v2
内容 你好世界
谢谢阅读

生成补丁文件

diff -u v1 v2 > 差异.patch

补丁文件内容如下,记录了v1和v2的差异

--- v1  2024-09-23 15:47:43.678086052 +0800
+++ v2  2024-09-23 15:48:10.626069062 +0800
@@ -1,3 +1,3 @@
-版本 v1
-内容 hello world
+版本 v2
+内容 你好世界谢谢阅读

使用补丁升级文档

当前v1文档内容:

版本 v1
内容 hello world
谢谢阅读

对v1使用补丁

patch v1 差异.patch

当前v1文档内容:升级到了v2版本

版本 v2
内容 你好世界
谢谢阅读

使用补丁降级文档

当前v1文档内容:

版本 v2
内容 你好世界
谢谢阅读

再次对v1使用补丁,或者使用-R​撤销以应用的补丁

patch v1 差异.patch

v1文档内容:将从v2降级到了v1版本

版本 v1
内容 hello world
谢谢阅读

备份文件

在应用补丁时可以使用-b​选项

patch -b v1 差异.diff

将额外生成备份文件v1.orig

撤销补丁

使用 -R​ ​选项,撤销先前打的补丁

patch -R v1 patchfile.diff

.diff​ 和 .patch​ 是补丁的两种后缀,用起来没有明显差别,.patch可能更 先进一点。

另一种风格示例

  • 示例 1:应用一个补丁文件
patch -p1 < patchfile.patch

在这个例子中,-p1​ 表示忽略补丁文件中的一个路径组件。<​ 符号表示从文件 patchfile.patch​ 读取补丁数据。

  • 示例 2:应用补丁并备份原始文件
patch -b < patchfile.patch

使用 -b​ 选项会在应用补丁之前备份原始文件,备份文件的名称通常为原始文件名加上 .orig​ 扩展名。

  • 示例 3:反向应用一个补丁
patch -R < patchfile.patch

这会撤销之前通过 patchfile.patch​ 应用到文件上的更改。

  • 示例 4:应用补丁到指定目录
patch -d /path/to/directory -p1 < patchfile.patch

这个命令会将补丁应用到 /path/to/directory​ 目录中的文件。

在使用 patch​ 命令之前,请确保你有原始文件的备份,以防补丁应用失败或产生不期望的结果。此外,你应该检查补丁文件以确保它与你的文件版本兼容。


http://www.ppmy.cn/ops/115185.html

相关文章

冒泡排序bubble sort

冒泡排序&#xff08;bubble sort&#xff09;通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样&#xff0c;因此得名冒泡排序。 算法流程 def bubble_sort(nums: list[int]):"""冒泡排序"""n len(nums)# 外循环&…

ubuntu、linux安装redis(使用tar包的方式)

目录 1、准备redis的tar包 2、执行make 3、执行make install 4、运行redis 5、总结 1、准备redis的tar包 去官网或者github上下载对应的tar包&#xff0c;我下载的是 redis-6.2.14.tar.gz 上传到ubuntu后&#xff0c;使用指令进行解压&#xff1a; tar -xvf redis-6.2.14.t…

【软件造价咨询】软件每年运维费用取开发费用百分之几合适

应用软件的运维费用相对于系统开发建设费用的占比因项目而异&#xff0c;但可以通过一些行业标准和基准数据来进行估算。根据北京软件造价评估联盟2020至2023年发布的《中国软件行业基准数据》CSBMK文件&#xff0c;在这项文件中用百分位数统计列出了“应用软件运维费用占比”的…

MapReduce基本原理

目录 整体执行流程​ Map端执行流程 Reduce端执行流程 Shuffle执行流程 整体执行流程 八部曲 读取数据--> 定义map --> 分区 --> 排序 --> 规约 --> 分组 --> 定义reduce --> 输出数据 首先将文件进行切片&#xff08;block&#xff09;处理&#xff…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件&#xff0c;构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说&#xff0c;它是一种表达&#xff0c;使软件工程师能够&#xff1a; (1)分…

LabVIEW软件出现Bug如何解决

在LabVIEW开发中&#xff0c;程序出现bug是不可避免的。无论是小型项目还是复杂系统&#xff0c;调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug&#xff0c;包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…

RHCS认证-Linux(RHel9)-Ansible

文章目录 一、ansible 简介二 、ansible部署三、ansible服务端测试四 、ansible 清单inventory五、Ad-hot 点对点模式六、YAML语言模式七、RHCS-Ansible附&#xff1a;安装CentOS-Stream 9系统7.1 ansible 执行过程7.2 安装ansible&#xff0c;ansible-navigator7.2 部署ansibl…

Windows系统的Tomcat日志路径配置

文章目录 引言I Windows系统的Tomcat日志路径配置配置常规日志路径访问日志路径配置,修改server.xmlII 日志文件切割:以分隔割tomcat 的 catalina.out 文件为例子通过Linux系统自带的切割工具logrotate来进行切割引言 需求:C盘空间不足,处理日志文件,tomcat日志迁移到D盘…