linux笔记 diff及patch的制作与使用
创始人
2024-05-23 20:46:27
0

相关命令展示

为方便查阅博客使用,预先展示相关命令

diff命令

diff -uN old.txt new.txt > patch_test.patch

单个文件,不需要使用-r参数

diff 选项参数 旧文件(夹) 新文件(夹) > 补丁

diff命令的常用选项参数

-r
递归recursion 将新旧版本代码所在目录所有文件递归比较,包括子目录

-N
确保补丁正确无误地处理已创建或删除文件的情况
-u
默认为输出每个需要修改的代码块的前后3行,如需指定行数,则使用-uNUM,更改NUM为所需行数

patch命令

旧文件目录

patch -p0 < patch_test.patch 

注意!patch必须在旧文件夹中打,否则将会发生错误!

patch命令的格式

patch将diff生成的补丁记录下的差异信息,应用到旧文件上

patch 选项参数 < 补丁 #	patch中已含有新旧文件的信息,无须将新旧文件作为参数输入

patch的常用选项参数

-pNUM
NUM表示忽略的文件夹层数,忽略patch文件中新旧文件的父目录层数
以desktop/diff_patch_test/old为例
-p0为在desktop目录下找diff_patch_test再找old
-p1则是忽略第一层的desktop目录,直接从当前目录下找diff_patch_test再找old
(存疑)
-E
empty 如果发现空文件,则删除,常见于需要删除旧文件夹中某个旧文件整体的情况,以及恢复补丁时删除之前新写的无效文件
-R
reverse 取消打的补丁

通过patch恢复源文件

当补丁错误时,可以使用-RE选项参数恢复源文件,意为取消打的补丁,并删除空文件

patch -RE -p0 

案例1:单个文件的补丁制作与替换

以单个文件为例,diff与patch制作及打补丁呈现过程

1.源文件(旧)

old.txt

11111111
22222222
33333333
44444444
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd

2.目的文件(新)

new.txt

11111111
55555555
66666666
77777777
aaaaaaaa
eeeeeeee
ffffffff
gggggggg

3.通过diff命令制作patch文件

在该文件目录下

diff -uN old.txt new.txt > patch_test.patch

因此处为单个文件,不需要使用-r参数

diff命令的格式

diff 选项参数 旧文件(夹) 新文件(夹) > 补丁

diff命令的常用选项参数

-r
递归recursion 将新旧版本代码所在目录所有文件递归比较,包括子目录

-N
确保补丁正确无误地处理已创建或删除文件的情况
-u
默认为输出每个需要修改的代码块的前后3行,如需指定行数,则使用-uNUM,更改NUM为所需行数

4.查看patch文件的组成

在这里插入图片描述

--- old.txt	2023-02-09 10:17:20.787930669 +0800	#	补丁头 ---开头表示旧文件
+++ new.txt	2023-02-09 10:18:54.989109075 +0800	#	补丁头 +++开头表示新文件
@@ -1,8 +1,8 @@	#	@@开头表示块位置 是文件需要修改前后的定位行及段落区间等信息,以@@结束#	-1,8表示需要修改的代码块在旧文件的行号,以及修改前该代码块区间的总行数# +1,8表示需要修改的代码块在新文件的行号,以及修改后该代码块区间的总行数11111111	#块内容 块内容的首列缩进1字符,空白表示引用/未作增删 -表示删去的内容 +表示增加的内容 
-22222222
-33333333
-44444444
+55555555
+66666666
+77777777aaaaaaaa
-bbbbbbbb
-cccccccc
-dddddddd
+eeeeeeee
+ffffffff
+gggggggg

5.打patch

旧文件目录

patch -p0 < patch_test.patch 

注意!patch必须在旧文件夹中打,否则将会发生错误!
错误如下:
在这里插入图片描述

patch命令的格式

patch将diff生成的补丁记录下的差异信息,应用到旧文件上

patch 选项参数 < 补丁 #	patch中已含有新旧文件的信息,无须将新旧文件作为参数输入

patch的常用选项参数

-pNUM
NUM表示忽略的文件夹层数,忽略patch文件中新旧文件的父目录层数
以desktop/diff_patch_test/old为例
-p0为在desktop目录下找diff_patch_test再找old
-p1则是忽略第一层的desktop目录,直接从当前目录下找diff_patch_test再找old
(存疑)
-E
empty 如果发现空文件,则删除,常见于需要删除旧文件夹中某个旧文件整体的情况,以及恢复补丁时删除之前新写的无效文件
-R
reverse 取消打的补丁

通过patch恢复源文件

当补丁错误时,可以使用-RE选项参数恢复源文件,意为取消打的补丁,并删除空文件

patch -RE -p0 

案例2:文件夹的补丁制作与替换

原理基本与上相同
与单个文件不同,在diff制作补丁时,需遍历整个文件夹,因此需要加-r选项参数
注意打补丁时需要到旧文件夹的目录下!
此处的-p1参数,是因为新旧文件夹中的改动通常在new文件夹和old文件夹里,需要忽略首层的old和new文件夹,将内容物替换

# 制作补丁
diff -uNr  old_docu  new_docu  > new_docu.patch
# 打补丁
cd new_docu	#	需要到旧文件夹目录下!
patch -p1 < old_docu.patch	#	注意选项参数-p1# 如有需要,取消补丁
#patch -R -p1 

案例3:git打补丁实战

1.生成

对于git的补丁有两种方案
git diff
生成UNIX标准补丁.diff文件
git format-patch
生成Git专用.patch文件

.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件

2.检查和应用

检查补丁状态

git apply --stat patch_name.patch

检查补丁是否可打入

git apply --check patch_name.patch

正式打入

git apply patch_name.patch

References

补丁的制作与应用

git生成patch和应用
如何用git生成pitch

相关内容

热门资讯

两代鸟的交谈作文【推荐3篇】 篇一:两代鸟的交谈近日,我在公园里目睹了一场令人惊叹的景象,一只年轻的鸟儿和一只老年鸟儿正在愉快地交...
一年级关于英雄事迹的作文50... 一年级关于英雄事迹的作文500字 篇一:《我的英雄》我的英雄是我的爸爸。他是一位普通的上班族,每天都...
记一件事小学生作文(精彩6篇... 记一件事小学生作文 篇一我和小狗的故事今天,我要给大家讲一个关于我和小狗的故事。这个故事发生在我上小...
抗击新型肺炎作文【通用5篇】 抗击新型肺炎作文 篇一:团结一心,共克时艰新型冠状病毒肺炎疫情突如其来,给我们的生活带来了巨大的冲击...
我可怜的橡皮泥状物作文【优质... 我可怜的橡皮泥状物作文 篇一橡皮泥是我最喜欢的玩具之一,可是它现在变得可怜兮兮的了。曾经,它是我快乐...
一年级作文水牛【经典6篇】 一年级作文水牛 篇一水牛是我国常见的牲畜之一,它们体型庞大,力大无穷,是农民朋友们的好帮手。今天,我...
我和我的好朋友作文【精彩6篇... 我和我的好朋友作文 篇一好朋友,是我们成长中最重要的陪伴。我有一个好朋友,她叫小芳。我们从小学开始就...
耳朵、鼻子和眼睛小学作文(推... 耳朵、鼻子和眼睛小学作文 篇一标题:我的耳朵、鼻子和眼睛我的耳朵、鼻子和眼睛是我身体上非常重要的器官...
课本剧表演作文(精选6篇) 课本剧表演作文 篇一我们班级最近进行了一次精彩的课本剧表演,给我们带来了很多乐趣和收获。这次表演的题...
最重要的一天小学作文【优选3... 最重要的一天小学作文 篇一最重要的一天小学作文今天是我人生中最重要的一天,因为我终于迎来了小学毕业典...
大爱无疆的作文(推荐6篇) 大爱无疆的作文 篇一无论身处何地,无论面对何种困境,大爱无疆的精神都是我们应该秉持的。在这个充满爱与...
二十年后的我小学作文(推荐6... 二十年后的我小学作文 篇一我是一名小学生,现在正在写一篇关于二十年后的我小学作文。在二十年后,我已经...
有趣的机器人小学优秀作文【通... 有趣的机器人小学优秀作文 篇一机器人小猫咪在一个不太远的未来,机器人成为了人们生活中不可或缺的一部分...
我最闪亮小学作文(优质3篇) 我最闪亮小学作文 篇一我最闪亮小学作文 我最闪亮小学作文 篇二第一篇内容标题:我最喜欢的老师作为一个...
鹭岛秋色秋游作文【最新3篇】 鹭岛秋色秋游作文 篇一鹭岛秋色秋游秋天是一年四季中最美丽的季节之一,而鹭岛也是一个恰如其分展现秋天之...
有趣的冬游小学作文(最新6篇... 有趣的冬游小学作文 篇一冬天是一个寒冷但又充满乐趣的季节。每当冬天来临,我就迫不及待地期待着一次有趣...
心情也有颜色作文(推荐3篇) 心情也有颜色作文 篇一心情也有颜色有时候,我们会发现自己的心情和颜色有着奇妙的联系。不同的心情会赋予...
我和神笔马良的一天作文【优质... 我和神笔马良的一天作文 篇一在一个阳光明媚的早晨,我迫不及待地来到了神笔马良的工作室。这是一个充满创...
大智若愚小学作文(精选3篇) 大智若愚小学作文 篇一大智若愚小学作文大智若愚是一种非常有意思的格言。它告诉我们,虽然我们可能很聪明...
《一九四二》观后感500字(... 《一九四二》观后感500字 篇一电影《一九四二》是一部由冯小刚导演的历史题材电影,该片以中国抗日战争...