修补过程
在典型的用例中,我们拥有源代码的原始版本和修改后的版本。
原件已被正式批准,对其进行任何更改都必须遵循明确定义的流程。
这些更改发生在补丁文件中。
使用名为 diff 的工具,将两个文件版本之间的差异减少到一个文件中,该文件列出了第二个对第一个所做的特定更改。
然后,生成的差异文件通过使用补丁工具修改原始代码。
应用补丁 示例
考虑一个典型的“Hello World”程序。
C 中的源代码如下所示:
#include <stdio.h> int main() { printf("Hello world!"); }
要将打印的消息更改为 Hello Universe!,请开发代码的替代版本,如下所示:
#include <stdio.h> int main() { printf("Hello universe!"); }
使用 diff 实用程序生成补丁文件:
diff -u helloworld.c helloworld2.c > file.patch
然后我们将看到补丁文件如下所示:
补丁文件列出了每个比较的文件。
它提供符号、 -- 和 +++ ,用其最后修订日期标识每个文件名。
然后它总结了一对@@ 符号之间变化的位置。
最后,它列出了源代码,使用注明的加减符号标记不同的行。
通常,减号表示修补文件中的行被删除,加号表示替换,如果该行将被替换。
要将补丁文件应用到原始文件,请执行:
patch < file.patch
此时,第一个文件更改为与第二个文件匹配。
要撤消补丁,请使用 -R 选项:
patch -R < file.patch
使用 'diff' 和 'patch' 更新文件
补丁是插入或者修改现有代码集的一段计算机代码。
在编程过程中通常使用补丁来替代对源代码的更改。
Linux 包含一个补丁实用程序来简化此过程。
修补过程通常用于正式的变更控制系统,其中代码质量和测试的专业最佳实践有效。
在业余项目中,修补程序不太常用,其中源代码由程序员自行决定更改。
注意事项
这种修补源代码的方法不像以前那么常见。
现在都是使用
Git 和 Subversion 等现代源代码控制系统会随着时间的推移自动管理版本,包括各种开发和测试分支,因此手动差异检查和文件修补现在由版本控制工具管理。
如果我们必须遵循正式的编码结构或者符合团队编码标准,请改用 Git 等工具。
但是,本地计算机上的差异和补丁系统的一个有效用例涉及对整个文件目录的更改。
例如,如果我们开发了一个网站,但只需要对一行进行更改(例如版权行),则该系统会同时更新所有这些页面。