补丁文件和差异文件之间的区别

Posted

技术标签:

【中文标题】补丁文件和差异文件之间的区别【英文标题】:Difference between patch and diff files 【发布时间】:2011-05-12 01:43:10 【问题描述】:

谁能解释一下 .diff 文件和 .patch 文件之间的区别。

【问题讨论】:

实际上patch是一个应用差异的工具。扩展无关紧要。 【参考方案1】:

重要的是文件的内容,而不是扩展名。这两个扩展都意味着某种 diff 实用程序(diffgit diffgit format-patchsvn diff)产生了输出。

许多差异实用程序产生的输出可以通过patch 命令应用。您将经常需要使用-d-p 选项来匹配patch 以正确匹配路径(带前缀、名称目标目录)。如果您在在线分发的文件上看到其中一个扩展名,则几乎可以肯定它与 patch 兼容。

Git 的 diff 输出与补丁兼容,但我相信 svn 不兼容。当然,git diff 生成的普通补丁可能最好由git apply 应用,而git format-patch 生成的补丁设计用于git-am

【讨论】:

【参考方案2】:

没有区别。 diff 实用程序生成一个补丁文件,该文件使用patch 应用。

【讨论】:

也就是说,当您使用diff 创建补丁时,您将其称为 foo.diff 或 foo.patch(或其他任何名称)。 patch 程序不在乎。 所以如果给出了一个差异文件并且据说你应该使用它来修补源代码,它意味着什么。我可以使用 patch -d -p[n] 命令来修补它吗? @Sen:“我可以使用patch...吗?”最好的答案是“试试看”。如果补丁不适用,或者patch 无法读取,您将收到错误消息。如果它有效,它就有效。 -d ... -p 是为了避免创建与生成补丁的目录结构相同的目录结构。例如如果补丁文件包含/home/user/projects/p1/prog.c并且需要应用到/home/anotheruser/work/project1/prog.cpatch -d /home/anotheruser/work/project <file.patch会这样做。但是如果有两个文件要打补丁-prog.c lib/lib.c,则需要做patch -d /home/anotheruser/work/project1 -p5 <file.patch【参考方案3】:

patch 是一个统一的差异 (-u),如果您执行以下操作: diff -u oldfile newfile, 使用 patch 命令行,您可以将差异应用到 oldfile 以成为其他地方的 newfile。

【讨论】:

我喜欢这个主意。补丁是差异的集合。我不是在寻找“正确的扩展名”,而是可能是一种命名的标准做法。无论这是否常用,对我来说都是有意义的。我将继续使用 .diff 处理单个文件差异,使用 .patch 处理多个合并差异。【参考方案4】:

对我来说,.diff 文件仅包含由“git diff”产生的文件差异(添加/删除的行)

.patch 我的文件还包含作者、日期和补丁/提交消息,由git show 生成。


Github 允许添加 .patch.diff 来拉取请求 URL。 .diff 仅包含文件更改,而 .patch 是该 PR 中所有提交的序列化,每个提交消息和文件内容差异。

【讨论】:

以上是关于补丁文件和差异文件之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

Linux 2 unit6 文本处理工具

在修订之间创建“补丁”?

diff(patch):比较两个文件之间的区别(补丁)

如何干净地编辑差异/补丁文件?有补丁文件编辑器吗?

如何可视化或格式化差异/补丁文件? [关闭]

Git diff 比较两个版本文件之间的差异