Linux环境下补丁制作过程

1 篇文章 0 订阅
1 篇文章 0 订阅

Linux环境下补丁制作过程

最近要做一个补丁文件,学习后做了一个小结。
补丁文件的制作和打补丁主要使用了linux下两条命令行语句:diff和patch,diff用来制作补丁,patch用来打补丁,下面具体介绍他们的用法。

diff

作用:用来比较两个文件的区别;
语法:$ diff [options] from_file to_file [> patchfile.patch]
详细说明: from_file为源文件,to_file为目标文件,> patchfile_patch用于创建一个名为patchfile.patch的文件,详细记录了两个文件的具体区别,也就是我们需要的补丁文件,当省略这部分则会直接在终端输出。Options为可选参数,下面三个为最常用的三个选项:

  • -r 递归选项,用于将两个目录下所有文件(包括子目录下的子文件)逐一比对,通常用于对多个文件或者文件夹打补丁;

  • -N 确保补丁文件将正确的处理已经创建或者删除的文件的情况;

  • -u 以统一格式(diff有传统格式和统一格式,现在基本都是用统一格式)创建补丁文件,这种格式比传统格式更紧凑些;

  • 此外还有很多选项,可以通过$ diff –help 命令查看,此处就不详细介绍了,制作补丁文件通常上面的三个选项就足够了。

patch

作用:用来为源文件打上补丁;
语法:$ patch [options] [from_file] [< patchfile.patch]
详细说明: from_file为需要打补丁的文件,< patchfile.patch为补丁文件,通过diff制作得到。Options为可选参数,下面介绍常用选项:

  • -pNum 表示忽略掉第Num层目录。例如:-p0表示从当前目录查找目标文件(夹),-p1表示忽略掉第一层目录,从当前目录查找;

  • -R 反向补丁,即将已经打了补丁的文件还原。

举例说明

为方便起见,文件内容均和文件名相同

1. 两个文件的补丁
a) 在桌面创建两个文件a1.txt和a2.txt,分别添加内容;
b) 制作两个文件的补丁文件:

$ diff a1.txt a2.txt > a12.patch

c) 查看补丁文件内容:

$ cat a12.txt
1c1
< a1
\ No newline at end of file
\---
> a2
\ No newline at end of file
a12.patch (END)

d) 为a1.txt文件打补丁:

$ patch a1.txt < a12.patch
patching file a1.txt

e) 查看现在a1.txt文件内容:

$ cat a1.txt
a2

可见补丁制作完成
f) 还原文件内容:

$ patch –R a1.txt < a12.patch
patching file a1.txt

g) 查看还原后文件内容:

$ cat a1.txt
a1

2. 两个文件夹的补丁
a) 创建如下的实验文件目录树并添加内容:

| -- a -- a1.txt
      |-- a2.txt
      | -- aa -- aa1.txt
            | -- aa2.txt
| -- b -- b1.txt
      |-- b2.txt
      | -- bb -- bb1.txt
            | -- bb2.txt

b) 制作补丁文件:

$ diff –Nur a b > ab.patch

c) 查看补丁文件内容:

$ cat ab.patch
Binary files a/.DS_Store and b/.DS_Store differ
diff -Nur a/a1.txt b/a1.txt
--- a/a1.txt    2018-03-30 14:23:34.000000000 +0800
+++ b/a1.txt    1970-01-01 08:00:00.000000000 +0800
@@ -1 +0,0 @@
-a1
\ No newline at end of file
diff -Nur a/a2.txt b/a2.txt
--- a/a2.txt    2018-03-30 14:24:21.000000000 +0800
+++ b/a2.txt    1970-01-01 08:00:00.000000000 +0800
@@ -1 +0,0 @@
-a2
\ No newline at end of file
diff -Nur a/aa/aa1.txt b/aa/aa1.txt
--- a/aa/aa1.txt    2018-03-30 14:24:17.000000000 +0800
+++ b/aa/aa1.txt    1970-01-01 08:00:00.000000000 +0800
@@ -1 +0,0 @@
-aa1
\ No newline at end of file
diff -Nur a/aa/aa2.txt b/aa/aa2.txt
--- a/aa/aa2.txt    2018-03-30 14:24:36.000000000 +0800
+++ b/aa/aa2.txt    1970-01-01 08:00:00.000000000 +0800
@@ -1 +0,0 @@
-aa2
\ No newline at end of file
diff -Nur a/b1.txt b/b1.txt
--- a/b1.txt    1970-01-01 08:00:00.000000000 +0800
+++ b/b1.txt    2018-03-30 14:25:34.000000000 +0800
@@ -0,0 +1 @@
+b1
\ No newline at end of file
diff -Nur a/b2.txt b/b2.txt
--- a/b2.txt    1970-01-01 08:00:00.000000000 +0800
+++ b/b2.txt    2018-03-30 14:26:04.000000000 +0800
@@ -0,0 +1 @@
+b2
\ No newline at end of file
Binary files a/bb/.DS_Store and b/bb/.DS_Store differ
diff -Nur a/bb/bb1.txt b/bb/bb1.txt
--- a/bb/bb1.txt    1970-01-01 08:00:00.000000000 +0800
+++ b/bb/bb1.txt    2018-03-30 14:26:05.000000000 +0800
@@ -0,0 +1 @@
+bb1
\ No newline at end of file
diff -Nur a/bb/bb2.txt b/bb/bb2.txt
--- a/bb/bb2.txt    1970-01-01 08:00:00.000000000 +0800
+++ b/bb/bb2.txt    2018-03-30 14:25:58.000000000 +0800
@@ -0,0 +1 @@
+bb2
\ No newline at end of file

d) 为a文件夹打补丁:

// 首先要进到原文件夹中,这步很重要!
$ cd a
$ patch –p1 < ../ab.patch
patching file a1.txt
patching file a2.txt
patching file aa/aa1.txt
patching file aa/aa2.txt
patching file b1.txt
patching file b2.txt
patching file bb/bb1.txt
patching file bb/bb2.txt

e) 还原文件夹内容:

$ patch –R –p1 < ../ab.patch
patching file a1.txt
patching file a2.txt
patching file aa/aa1.txt
patching file aa/aa2.txt
patching file b1.txt
patching file b2.txt
patching file bb/bb1.txt
patching file bb/bb2.txt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值