使用示例分析
上下文模式 使用方法加入 c 参数(代表context):$ diff -c f1 f2
体现结果如下:
$ diff -c f1 f2
*** f1 2019-05-20 14:22:15.111801433 +0800
--- f2 2019-05-20 14:22:27.401207382 +0800
***************
*** 1,7 ****
a
a
a
! a
a
a
a
--- 1,7 ----
a
a
a
! hello
a
a
a
这个结果分成四个部分。
第一部分的两行,体现两个文件的基本环境:文件名和时间信息。
*** f1 2019-05-20 14:22:15.111801433 +0800
--- f2 2019-05-20 14:22:27.401207382 +0800
提示:"***" 表示变更前的文件,"---" 表示变更后的文件。
第二部分是15个星号,将文件的基本环境与变更内容分割开。
***************
第三部分体现变更前的文件,即 f1。
*** 1,7 ****
a
a
a
!a
a
a
a
这时不仅体现发生变化的第 4 行,还体现第 4 行的前面三行和反面三行,因此一共体现7行。以是,前面的"*** 1,7 ****"就表示,从第 1 行开始连续 7 行。
另外,文件内容的每一行最前面,还有一个标志位。如果为空,表示该行无变化;
如果是感叹号(!),表示该行有改动;
如果是减号(-),表示该行被删除;
如果是加号(+),表示该行为新增。
第四部分体现变更后的文件,即f2。
--- 1,7 ----
a
a
a
!hello
a
a
a
除了变更行(第4行)以外,也是上下文各体现三行,统共体现7行。
归并格式的 diff:也即 Unified 模式
如果两个文件相似度很高,那么上下文格式的 diff,将体现大量重复的内容,很浪费空间。1990年,GNU diff 率先推出了"归并格式"的 diff,将 f1 和 f2 的上下文归并在一起体现。
diff 还有一种比力方式,也即 Unified 模式,使用命令行 –u 来执行该模式的比力。其比力结果与Context模式很像,但是简化了一些输出,我们看看我们的案例文件,与上面的一样:
使用diff –u 比力的结果:
可以看到其比力结果与Context模式实际上差不多,只不过将比力结果归并到一起了
使用示例分析
加入u参数(代表unified):$ diff -u f1 f2
体现结果如下:
$ diff -u f1 f2
--- f1 2019-05-20 14:22:15.111801433 +0800
+++ f2 2019-05-20 14:22:27.401207382 +0800
@@ -1,7 +1,7 @@
a
a
a
-a
+hello
a
a
a
第一部分,也是文件的基本信息。
--- f1 2019-05-20 14:22:15.111801433 +0800
+++ f2 2019-05-20 14:22:27.401207382 +0800
"---"表示变更前的文件,"+++"表示变更后的文件。
第二部分,变更的位置用两个@作为起首和结束。
@@ -1,7 +1,7 @@
前面的"-1,7"分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,"7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。
同样的,"+1,7"表示变更后,成为第二个文件从第1行开始的连续7行。
第三部分,是变更的详细内容。
a
a
a
-a
+hello
a
a
a
除了有变更的那些行以外,也是上下文各体现3行。它将两个文件的上下文,归并体现在一起,以是叫做"归并格式"。
每一行最前面的标志位,空表示无变更,减号表示第一个文件删除的行,加号表示第二个文件新增的行。
git 格式的 diff
版本管理系统git,使用的是归并格式 diff 的变体:$ git diff
体现结果如下:
diff --git a/f1 b/f1
index 6f8a38c..3235643 100644
--- a/f1
+++ b/f1
@@ -1,7 +1,7 @@
a
a
a
-a
+hello
a
a
a
第一行 表示结果为 git 格式的diff。
diff --git a/f1 b/f1
进行比力的是,a版本的f1(即变更前)和b版本的f1(即变更后)。
第二行 表示两个版本的 git 哈希值(index区域的6f8a38c对象,与工作目录区域的449b072对象进行比力),末了的六位数字是对象的模式(平凡文件,644权限)。
index 6f8a38c..449b072 100644
第三行 表示进行比力的两个文件。
--- a/f1
+++ b/f1
"---"表示变更前的版本,"+++"表示变更后的版本。
反面的行都与官方的归并格式diff相同。
@@ -1,7 +1,7 @@
a
a
a
-a
+hello
a
a
a 比力目录