侧边栏壁纸
  • 累计撰写 146 篇文章
  • 累计收到 2 条评论

patch

soulio
2024-09-23 / 0 评论 / 5 阅读 / 正在检测是否收录...

一、命令简介

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

本文共 812 个字数,平均阅读时长 ≈ 3分钟
0

海报

正在生成.....

评论 (0)

取消