diff 和 patch 命令简明教程

diff

命令格式: diff [option] file1 file2diff [option] dir1 dir2
作用: 比较两个文件的差异,linuxer 必学命令。

文件test.c

#include 
using namespace std;

int main(int argc, char **argv)
{
    printf("hello world\n");
    vector vec;
    vec.push_back(1);

    vector vec2;
    vec2.push_back(3);

    vec.max_size();
    return 0;

}

文件test.cpp

#include 
using namespace std;

int main(int argc, char **argv)
{
    printf();
    vector vec;
    vec.push_back(1);

    vector vec2;
    vec2.push_back(3);
    
    printf("coding ...");       

    return 0;

}

1、 采用默认参数比较两个文件
命令: diff test.c test.cpp

6c6
<   printf("hello world\n");
---
>   printf();
11a12,13
>   
>   printf("coding ...");       
13d14
<   vec.max_size();

说明:

  • 6c6test.ctest.cpp第六行内容有所不同。c - change。
  • 11a12,13test.cpptest.c 多了12,13行。a - add。
  • 13d14test.cpptest.c少了 14行。d - delete。

2、比较两个文件并排输出
命令: diff test.c test.cpp -y -W 80

diff 和 patch 命令简明教程_第1张图片
并排输出.PNG

*说明:

  • | 表示前后2个文件内容有不同
  • < 表示后面文件比前面文件少了1行内容
  • > 表示后面文件比前面文件多了1行内容

3、比较两个文件上下文输出
命令: diff test.c test.cpp -c

*** test.c  2016-11-26 22:38:50.480834192 +0800
--- test.cpp    2016-11-26 22:39:56.528831580 +0800
***************
*** 3,16 ****
  
  int main(int argc, char **argv)
  {
!   printf("hello world\n");
    vector vec;
    vec.push_back(1);
  
    vector vec2;
    vec2.push_back(3);
  
-   vec.max_size();
    return 0;
  
  }
--- 3,17 ----
  
  int main(int argc, char **argv)
  {
!   printf();
    vector vec;
    vec.push_back(1);
  
    vector vec2;
    vec2.push_back(3);
+   
+   printf("coding ...");       
  
    return 0;
  
  }

说明:

  • 比较的文件的后者比前着多一行
  • 比较的文件的后者比前着少一行
  • 比较的文件两者有差别的行

4、统一格式输出
命令: diff test.c test.cpp -u

--- test.c  2016-11-26 22:38:50.480834192 +0800
+++ test.cpp    2016-11-26 22:39:56.528831580 +0800
@@ -3,14 +3,15 @@
 
 int main(int argc, char **argv)
 {
-   printf("hello world\n");
+   printf();
    vector vec;
    vec.push_back(1);
 
    vector vec2;
    vec2.push_back(3);
+   
+   printf("coding ...");       
 
-   vec.max_size();
    return 0;
 
 }

说明:
它的第一部分,也是文件的基本信息:
--- test.c 2016-11-26 22:38:50.480834192 +0800
+++ test.cpp 2016-11-26 22:39:56.528831580 +0800
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
   @@ -3,14 +3,15 @@
前面的"-3,14"分成三个部分:减号表示第一个文件,"1"表示第1行,"14"表示连续14行。合在一起,就表示下面是第一个文件从第3行开始的连续14行。同样的,"+3,15"表示变动后,成为第二个文件从第3行开始的连续15行。

pacth

pacth 命令 和 diff 结合起来打补丁。
1、生成补丁
命令: diff -Naur test.c test.cpp > test.patch
查看补丁: cat test.patch

--- test.c  2016-11-26 22:38:50.480834192 +0800
+++ test.cpp    2016-11-26 22:39:56.528831580 +0800
@@ -3,14 +3,15 @@
 
 int main(int argc, char **argv)
 {
-   printf("hello world\n");
+   printf();
    vector vec;
    vec.push_back(1);
 
    vector vec2;
    vec2.push_back(3);
+   
+   printf("coding ...");       
 
-   vec.max_size();
    return 0;
 
 }

2、打补丁
命令: pacth -b < test.patch
查看效果: diff test.c test.cpp -y

diff 和 patch 命令简明教程_第2张图片
补丁效果.PNG

3、撤销补丁
命令: patch -R < test.patch
查看效果: diff test.c test.cpp -y

diff 和 patch 命令简明教程_第3张图片
撤销补丁效果.PNG

上面演示的都是单文件,若是目录做法也是类似的。

你可能感兴趣的:(diff 和 patch 命令简明教程)