diff补丁格式
diff补丁格式
在Uboot学习中,接触到了打补丁这个操作,首先来学习下diff的patch文件格式.
命令参数
diff
- ”-u”:表示在比较结果中输出上下文中一些相同的行
- “-r“:表示递归比较各个子目录下的文件
- “-N“:将不存在的文件当作空文件
- “-w“:忽略空格的比较
- “-B“:忽略空行的比较
patch
-pn
,表示忽略diff命令中原文件路径中的几层父目录,-p1
表示忽略第一个父目录
补丁文件内容
- 第一行,首先指定文件目录路径个比对参数
- 第二行,
---.....
表示原来的文件 - 第三行,
+++....
表示新文件 - 第四行一般是被
@@...@@
包含的内容,比如@@ -206,8 +206,8 @@
: -206表示原来的第206行,8表示总共8行,+206表示这是从新文件的206行,总共也有8行 - 文件内容中
-
表示删除这一行,+
表示新增这一行,无+-
表示保持原来的
制作补丁
使用命令 diff -urN oldFloder NewFloder > mypatch.diff
,其中oldFloder
为原旧文件,NewFloder
为新文件,生成补丁mypatch.diff
应用补丁
使用命令patch
来应用补丁
例子
-
在OldFloder存在文件test.txt
111111 222222 333333 444444 555555
-
在NewFloder存在文件test.txt
111111 add here delete 222222 here 33 change 33 444444 555555
-
为OldFloder创建补丁
diff -urN OldFloder NewFloder > test.diff
-
查看下补丁的内容
cat test.diff
diff -urN OldFloder/test.txt NewFloder/test.txt --- OldFloder/test.txt 2018-09-20 21:15:40.576162357 +0800 +++ NewFloder/test.txt 2018-09-20 21:17:02.747161577 +0800 @@ -1,5 +1,5 @@ -111111 -222222 -333333 +111111 add here +delete 222222 here +33 change 33 444444 555555
-
应用补丁,
patch -p1 < ../test.diff
,命令前面的-p1
表示忽略路径中第1个父目录,我们这里是在OldFloder
中应用的,所以是p
-
查看在
OldFloder
中的文件cat test.txt
,可以发现已经应用成功111111 add here delete 222222 here 33 change 33 444444 555555
-
例子解析
diff -urN OldFloder/test.txt NewFloder/test.txt --- OldFloder/test.txt 2018-09-20 21:15:40.576162357 +0800 +++ NewFloder/test.txt 2018-09-20 21:17:02.747161577 +0800 @@ -1,5 +1,5 @@ -111111 -222222 -333333 +111111 add here +delete 222222 here +33 change 33 444444 555555
@@ -1,5 +1,5 @@
表示原来文件的第1行开始,总共有5行,新文件从第1行开始,总共有5行-111111
表示删除原文件这一行-222222
表示删除原文这一行-333333
表示删除原文这一行- 后面三个
+++....
表示新增这一行 - 接下去的
444444
和55555
表示不更改 - 这么减了三行,去除三行,然后再保留原来的两行
444444
和555555
,总共还是5行