diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。
diff命令的输出格式有三种:
- 正常格式(normal diff)
- 上下文格式(context diff)
- 合并格式(unified diff)
举个例子,现在有1个文件a.txt,里面内容如下:
我们先通过复制一份文件b.txt:
sudo cp a.txt b.txt复制代码
并把b.txt内容第二行改为其他的内容,如下:
(1)正常格式
正常格式下我们无需加任何选项,直接如下比对就好:
diff a.txt b.txt复制代码
执行完的结果如下:
我们一行一行来解释上图的含义。
行一行:2c2
第一个2表示文件a.txt中第2行有变化,后面的2表示a.txt通过变化成为b.txt中的第2行。中间的c就是具体的变化了。c表示改变(change),其它类型还有d删除(delete),a增加(addition)。
第二行:< line 2
表示a.txt文件中去除第2行的内容,其中小于号表示去除。
第三行:------
分隔线
第四行:> this is 2
表示b.txt文件中增加第2行的内容,其中大于号表示增加。
(2)上下文格式
由于在正常格式下,提示信息比较少,我们无法快速定位所修改的地方,经常需要打开文件才知道修改细节。所以,为了给出更多的信息,引入了上下文格式。它的使用命令如下:
diff -c a.txt b.txt复制代码
上图的输出结果的具体含义如下:
第1行和第2行表示修改前及修改后的文件及更新时间。下面的*** 1,3 ****表示a.txt文件显示的从第1行开始到第3行为止的内容。line 2前的叹号(!)表示该行有改动,如果该行被删除,则为减号(-),如果该行被增加,则为加号(+)。后面几行的含义类似。
(3)合并格式
这种格式是正常格式与上下文格式的综合版,同时这种格式也是git diff所采用的格式。使用这种格式的命令是:
diff -u a.txt b.txt复制代码
上图的输出结果详细含义如下:
第1行和第2行表示修改前及修改后的文件及更新时间。后面的-line 2表示原文件a.txt里的内容,+this is 2表示b.txt里的内容。
除了以上三种格式外,还有另外一直更直观的方式——并排格式。这种显示格式的命令格式如下:
diff a.txt b.txt -y -W 50复制代码
这种格式就是以并列的格式进行显示,也很直观明了。第2行里,有个“|”符号,表示这行有更改。另外,如果前面是“<”,表示后面文件比前面文件少了1行内容;如果是">",表示后面文件比前面文件多了1行内容。