补丁文件和差异文件之间的区别
Posted
技术标签:
【中文标题】补丁文件和差异文件之间的区别【英文标题】:Difference between patch and diff files 【发布时间】:2011-05-12 01:43:10 【问题描述】:谁能解释一下 .diff 文件和 .patch 文件之间的区别。
【问题讨论】:
实际上patch是一个应用差异的工具。扩展无关紧要。 【参考方案1】:重要的是文件的内容,而不是扩展名。这两个扩展都意味着某种 diff 实用程序(diff
、git diff
、git format-patch
、svn 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.c
,patch -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 中所有提交的序列化,每个提交消息和文件内容差异。
【讨论】:
以上是关于补丁文件和差异文件之间的区别的主要内容,如果未能解决你的问题,请参考以下文章