10

当提到“提交补丁”时,补丁这个词到底是什么意思?

我已经看到它被大量使用,尤其是在开源世界中。这是什么意思以及提交补丁的具体内容是什么?

4

10 回答 10

18

它是一个文件,其中列出了已更改的代码文件之间的差异。它通常是通过对两个文件执行diff -u生成的格式。大多数版本控制系统允许轻松创建补丁,但通常采用相同的格式。

这允许使用patch命令轻松地将代码更改应用于其他人的源代码副本。

例如:

假设我有以下代码:

<?php
  $foo = 0;
?>

我把它改成这样:

<?php
  $bar = 0;
?>

补丁文件可能如下所示:

Index: test.php
===================================================================
--- test.php    (revision 40)
+++ test.php    (working copy)
@@ -3,7 +3,7 @@
         <?php
-            $foo = 0;
+            $bar= 0;
         ?>
于 2008-10-08T18:51:19.820 回答
6

Red Hat 的开发人员 Richard Jones 有一本关于向开源项目提交代码的不错的入门读物,其中包括制作和提交补丁。

于 2008-10-08T18:58:09.900 回答
4

补丁通常是一个文件,其中包含如何更改某些内容的信息(通常用于修复错误,但也可能是增强功能)。有不同种类的补丁。

源代码补丁包含如何修改一个或多个源代码文件的信息。您可以使用diff命令轻松生成它们,也可以使用patch命令应用它们(在 Linux/UNIX 系统上,这些命令是标准的)。

但是,也有二进制补丁。二进制补丁包含如何更改二进制文件中某些字节的信息。当然,二进制补丁在开源世界中很少见,但在计算机的早期,我看到很多修改交付的二进制文件(通常是为了解决错误)。

提交补丁意味着您在本地修复了某些内容,现在您将文件发送给某人,因此他可以将此补丁应用到他的本地副本或网络上的公共副本,因此其他用户可以从修复中受益。

如果您有一些几乎可以在某个平台上编译的源代码,也经常使用补丁,但是需要进行一些微小的更改才能真正在那里编译。当然,您可以获取源代码,对其进行修改并提供修改后的代码以供下载。但是,如果原始源再次更改(例如错误得到修复或添加了小的增强功能)怎么办?然后您必须重新下载源代码,再次应用更改并提供新的修改版本。保持修改后的源代码是最新的需要做很多工作。您无需修改​​,而是创建一个差异在原始副本和修改后的副本之间,并将其存储在您的服务器上。如果现在用户想从源代码下载和编译应用程序,他可以首先下载原始源代码的最新和最好的版本,然后应用您的补丁(因此它会编译)并且始终具有最新版本,而无需您进行更改补丁。仅当您的补丁修改的地方之一的原始源已完全更改时,才会出现问题。在这种情况下,系统将拒绝应用补丁,需要制作新的补丁。

于 2008-10-08T19:00:12.923 回答
1

补丁是一个文件,其中包含将维护者的源代码树转换为您自己的所有必要信息。它通常由difforsvn diff或之类的工具创建git format-patch

传统上,开源项目以补丁的形式接受来自普通 schlub 的提交,因此他们不必授予其他人对其存储库的提交访问权限。

于 2008-10-08T18:52:08.603 回答
1

补丁,通常采用 .patch 文件的形式,是一种常见的平面文件格式,用于传输两组代码文件之间的差异。因此,如果您正在开发一个开源项目,并对文件进行代码更改,并希望将其提交给项目所有者进行签入(通常是因为您没有签入权限),您可以通过补丁来完成.

WinMerge 内置了此功能,许多其他工具(如 TortoiseSVN)也是如此。

于 2008-10-08T18:52:56.010 回答
1

补丁文件代表现有源代码和您修改的源代码之间的差异。它是在许多项目中添加功能或修复错误的主要方法。

您可以使用 diff 命令创建补丁(例如)。

然后,您可以将此补丁提交到开发邮件列表,如果收到良好,则提交者将应用补丁(从而自动应用您的更改)并提交代码。

使用 patch 命令应用补丁。

于 2008-10-08T18:53:11.330 回答
1

通常它意味着提交一个统一的差异文件,其中包含一个特性的聚合变更集。您可以在 Wikipedia 上阅读有关补丁的更多信息。几个版本控制系统(svn、git 等)会根据变更集为您创建一个补丁文件。

于 2008-10-08T18:53:17.553 回答
1
 1. n. A temporary addition to a piece of code, usually as a quick-and-dirty

补救现有的错误或错误功能。补丁可能有效,也可能无效,最终可能会或可能不会永久合并到程序中。与 diff 或 mod 的区别在于补丁是通过比程序的其余部分更原始的方式生成的;经典示例是使用前面板开关修改的指令,以及直接对最初以 HLL 编写的程序的二进制可执行文件进行的更改。比较单行修复。

在此处查看行话文件中的完整定义

于 2008-10-08T18:53:37.397 回答
1

补丁也用于更新系统二进制文件。微软一直在发送补丁,但它们不是源代码。它们是安装改进的二进制文件的 .msp 文件。与所有计算机科学术语一样,patch 是重载的。

于 2010-06-17T02:54:30.203 回答
0

我一直认为这个词的意思是修复错误,就像妈妈用来穿在你的破洞牛仔裤上的膝盖补丁。

于 2008-10-08T18:53:05.993 回答