diff文件和patch文件使用

diff文件和patch文件使用简述顾名思义 diff 是差异的意思 patch 是补丁的意思 合起来理解就是根据差异进行打补丁 应用场景补丁 patch 这中方式在大型的项目中比较常见 一个需求需要对多个模块进行修改 比如一个项目中有 module1 module9 九个模块 module1 上有文件修改了 需要在其它模块上进行验证 本地进行验证 代码未提交 这时比较方面快捷的方式就是生成一个 patch 文件 发给相应模块的开发人员进行验证 补丁生成及使用 OK 进入正题 本地模仿

简述

       顾名思义,diff是差异的意思,patch是补丁的意思,合起来理解就是根据差异进行打补丁。

应用场景

       补丁patch这中方式在大型的项目中比较常见,一个需求需要对多个模块进行修改,比如一个项目中有module1……module9九个模块,module1上有文件修改了,需要在其它模块上进行验证(本地进行验证,代码未提交),这时比较方面快捷的方式就是生成一个patch文件,发给相应模块的开发人员进行验证。

补丁生成及使用

       OK,进入正题,本地模仿演示下patch的生成及使用方法,我在本地新建了test文件夹,里面又创建了三个文件夹,其中source1:表示module1

source2:表示module1修改后的文件(对于加入版本管理的文件不需要source2)

other:表示需要验证的其它模块

diff文件和patch文件使用

source1文件夹中有个file1.test文件,文件内容如下

diff文件和patch文件使用

现在我们对这个文件进行修改,并将修改后的文件放到source2文件夹下面(对于加入版本管理的文件不需要移动文件),修改后如下:

diff文件和patch文件使用

下一步使用diff命令查看修改前后的差异,直接使用diff比较不太容易理解,加入参数后比较容易看(LCTT 译注:参数 -N 代表如果比较的文件不存在,则认为是个空文件, -a 代表将所有文件都作为文本文件对待,-u 代表使用合并格式并输出上下文,-r 代表递归比较目录),下面是加参数和未加参数输出比较:

diff文件和patch文件使用

diff文件和patch文件使用

上面输出我们可以看出对文件进行了哪些修改,其中—表示修改前的文件,+++表示修改后的,-表示删除了该行,+表示增加了该行。

生成patch

$ sudo diff -Naur source1/file1.test source2/file1.test > file.patch 

diff文件和patch文件使用

运行命令后在当前路径下生成了file.patch文件,文件内容就是通过diff查看到的内容。到此完成了patch的生成,其实很简单,就是将修改前后的差异(diff)保存到文件中,这个文件就是补丁patch。

接下来我们就把补丁发给其它模块的开发人员小王,小王负责other模块(就是上面的other文件夹),小王本地代码也有module1的代码,是未修改的,小王要把补丁应用起来就需要在相应路径(对照patch文件中file1.test路径)下运行

sudo patch -p1 <../file.patch

diff文件和patch文件使用

成功之后,小王本地代码中的file1.test文件也同步了patch中的修改,就可以进行验证了。

 

注:对于加入版本管理(git等)的文件,修改后的文件会有状态记录,直接diff单个文件就行了。

很简单的点,无聊写下来记录。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227008.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:09
下一篇 2026年3月16日 下午10:10


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号