UP | HOME

diff和patch命令使用

Table of Contents

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;
}

参考

备注

Author: josephzeng

Lastmod: <2021-02-09 Tue>

License: CC BY-NC-ND 4.0

First created: 2021-02-09 Tue 00:00
Last updated: 2021-11-25 Thu 23:21
Power by Emacs 27.1 (Org mode 9.4)
© 2017 – 2021 by josephzeng