Patch是一个命令,用于将补丁文件应用于源代码、配置等文件。修补程序文件保留原始文件和新文件之间的差异。为了得到我们使用的差异或补丁 diff
工具。
软件是由一堆源代码组成的。源代码是由开发人员开发和修改的。为每次更改获取全新的文件不是一种实用且快速的方法。因此,只分发更改是最好的方法。应用于旧文件和新文件或修补文件的更改将针对新版本的软件进行编译。
语法
patch [options] [originalfile [patchfile]] patch -pnum救命
$ patch --help救命 创建修补程序文件
现在我们将在这一步创建补丁文件,但我们需要一些简单的源代码与两个不同的版本。我们称源代码文件名为
myapp.c
.我的应用程序旧.c
#includevoid main(){ printf("Hi poftut"); } 我的应用程序c
#includevoid main(){ printf("Hi poftut"); printf("This is new line as a patch"); } 现在我们将创建一个名为
myapp.patch
.$ diff -u myapp_old.c myapp.c > myapp.patch创建修补程序文件 我们可以打印
myapp.patch
使用以下命令创建文件$ cat myapp.patch应用修补程序文件
现在我们有了一个补丁文件,我们假设我们已经将这个补丁文件传输到了一个系统,这个系统保存了名为
myapp_old.patch
. 我们将简单地应用这个补丁文件。以下是修补程序文件包含的内容
- 修补文件的名称
- 不同的内容
$ patch < myapp.patch应用修补程序文件
在应用修补程序之前进行备份
其中一个有用的功能是在应用修补程序之前进行备份。我们将使用
-b
选择备份。在我们的示例中,我们将使用myapp.patch
.$ patch -b < myapp.patch在应用修补程序之前进行备份 备份名称将与源代码文件相同,只需添加
.orig
分机。所以备份文件名myapp.c.orig
设置备份文件版本
在进行备份时,备份文件可能已经准备就绪。所以我们需要保存多个备份文件而不重写。有
-V
选项,该选项将设置原始文件的版本控制机制。在本例中,我们将使用numbered
版本控制。$ patch -b -V numbered < myapp.patch设置备份文件版本 从截图中我们可以看到,新的备份文件被命名为数字
myapp.c.~1~
验证修补程序文件 应用或干运行
我们可能只想验证或查看修补的结果。此功能有一个选项。我们将使用
--dry-run
选项,只模拟修补过程,但不改变任何文件真的。$ patch --dry-run < myapp.patch反向补片
有时我们可能需要按相反的顺序修补。所以申请的过程是相反的。我们可以用
-R
此操作的参数。在本例中,我们将修补myapp_old.c
而不是myapp.c
$ patch -R myapp_old.c < myapp.patch反向补片 正如我们所看到的,新的变化被还原回来了。