diff和patch命令使用
diff和patch是一对对应工具,作为程序员了解是很有必要的。
diff介绍
diff 是一个文件比较工具。
常用参数:
-r | 递归处理目录 |
-N | 缺失的文件当作空白文件处理 |
语法
diff [options] old new
例子
➜ shell diff -urN a.c b.c --- a.c 2021-02-09 11:29:12.840339700 +0800 #更新前的文件 +++ b.c 2021-02-09 10:31:40.435054200 +0800 #更新后的文件 @@ -1,8 +1,8 @@ #-1,8为更新前的8行 +1,8为更新后的8行 -/* old */ # - 表示删除 +/* new */ # + 表示增加 #include <stdio.h> int main(int argc, char *argv[]) { - printf("old\n"); + printf("new\n"); return 0; }
patch介绍
patch 是一个可以将diff生成的补丁应用到源文件,生成一个打过补丁版本的文件。
常用参数:
-i | 指定补丁文件 |
-pNum | -p0表示从当前目录搜索改动的文件 |
-p1表示忽略第一层目录 | |
-pNum以此类推 | |
-E | 回滚撤销补丁 |
-o | 输出到一个文件不是直接覆盖文件 |
语法
patch [oiption] [originalfile [patchfile]]
例子
➜ shell cat a.c /* old */ #include <stdio.h> int main(int argc, char *argv[]) { printf("old\n"); return 0; } ➜ shell cat b.c /* new */ #include <stdio.h> int main(int argc, char *argv[]) { printf("new\n"); return 0; } # 生成补丁文件 ➜ shell diff -urN a.c b.c > diff.patch ➜ shell cat diff.patch --- a.c 2021-02-10 00:53:25.349189600 +0800 +++ b.c 2021-02-09 10:31:40.435054200 +0800 @@ -1,8 +1,8 @@ -/* old */ +/* new */ #include <stdio.h> int main(int argc, char *argv[]) { - printf("old\n"); + printf("new\n"); return 0; } # 打补丁 ➜ shell patch -p0 < diff.patch patching file a.c ➜ shell cat a.c /* new */ #include <stdio.h> int main(int argc, char *argv[]) { printf("new\n"); return 0; } # 或 生成新文件再覆盖 ➜ shell patch a.c -i diff.patch -o d.c patching file d.c (read from a.c) ➜ shell cat d.c /* new */ #include <stdio.h> int main(int argc, char *argv[]) { printf("new\n"); return 0; } # 撤销回滚补丁 ➜ shell patch -p0 -E < diff.patch patching file a.c Reversed (or previously applied) patch detected! Assume -R? [n] y ➜ shell cat a.c /* old */ #include <stdio.h> int main(int argc, char *argv[]) { printf("old\n"); return 0; }