学习分析diff的输出

SYNOPSIS

diff [OPTION]... FILES

FILES一般为<old file> <new file>

DESCRIPTION

https://manpages.debian.org/buster/diffutils/diff.1.en.html

Normal diff(普通模式)

最早的Unix(即AT&T版本的Unix),使用的就是这种格式的diff。

$ diff f1 f2
4c4
< a
---
> b

分析:

  1. a表示addition,d表示deletion,c表示change
  2. 4c4表示old file(f1)的第4行change为new file(f2)的第四行
  3. <表示删除,>表示增加,---表示分割old file与new file的改动显示

Context diff(上下文格式)

上个世纪80年代初,加州大学伯克利分校推出BSD版本的Unix时,觉得diff的显示结果太简单,最好加入上下文,便于了解发生的变动。因此,推出了上下文格式的diff。
它的使用方法是加入c参数(代表context)。

diff -c  f1 f2
*** f1	2020-06-05 10:56:20.728913835 +0800
--- f2	2020-06-05 10:56:39.480910387 +0800
***************
*** 13,19 ****
  a
  a
  a
! a
  a
  a
  a
--- 13,19 ----
  a
  a
  a
! b
  a
  a
  a

分析:

  1. ***表示变动前的文件,---表示变动后的文件。
  2. 2020-06-05 10:56:20.728913835 +0800 表示最后修改日期与修改时间,+0800是中国的北京时间
  3. *** 13,19 ****表示变动前的文件的第13行到第19行。
  4. 每行前有标志位,如果为空,表示该行无变化;若是!,表示该行有改动;若是-,表示该行被删除;若是+,表示该行为新增。除了变动行(第4行)以外,也是上下文各显示三行,总共显示7行

Unified diff(合并格式)

如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。

diff -u  f1 f2
--- f1	2020-06-05 10:56:20.728913835 +0800
+++ f2	2020-06-05 10:56:39.480910387 +0800
@@ -13,7 +13,7 @@
 a
 a
 a
-a
+b
 a
 a
 a

分析:

  1. @@ -13,7 +13,7 @@中,-表示第一个文件(即f1),"13"表示第13行,“7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+13,7"表示变动后,成为第二个文件从第13行开始的连续7行
  2. 每一行最前面的标志位,空表示无变动,-表示第一个文件删除的行,+表示第二个文件新增的行。

git格式的diff

版本管理系统git,使用的是合并格式diff的变体。

  diff --git a/f1 b/f1
  index 6f8a38c..449b072 100644
  --- a/f1
  +++ b/f1
  @@ -1,7 +1,7 @@
   a
   a
   a
  -a
  +b
   a
   a
   a

分析:

  1. diff --git a/f1 b/f1表示结果为git格式的diff
  2. index 6f8a38c..449b072 100644表示两个版本的git哈希值(暂存区的6f8a38c对象,与工作区的449b072对象进行比较),最后的六位数字是对象的模式(普通文件,644权限)。
  3. ---表示变动前的版本,+++表示变动后的版本。
  4. @@ -1,7 +1,7 @@中,-表示第一个文件(即f1),"1"表示第1行,“7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,”+1,7"表示变动后,成为第二个文件从第1行开始的连续7行
  5. 每一行最前面的标志位,空表示无变动,-表示第一个文件删除的行,+表示第二个文件新增的行。

参考

http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
https://manpages.debian.org/buster/diffutils/diff.1.en.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值