ch1.1 diff和patch (《Git权威指南》阅读笔记)

本文详细介绍了如何使用diff命令来比较两个文本文件的差异,并解释了diff输出的含义。此外,还介绍了如何利用patch命令根据diff输出恢复文件,以及diff和patch在目录比较中的应用。

1.用diff命令比较两个文本文件或目录的差异 

hello文件

应该杜绝文章中的错别字。

但是无论使用
* 全拼,双拼
* 还是五笔

是人就有可能犯错,软件更是如此。

犯了错,就要扣工资!

改正的成本可能会很高。

world文件

应该杜绝文章中的错别字。 

但是无论使用
* 全拼,双拼
* 还是五笔

是人就有可能犯错,软件更是如此。

改正的成本可能会很高。

但是“只要眼球足够多,所有Bug都好捉”,这就是开源的哲学之一。

  diff命令

$ diff -u hello world > diff.txt

  diff.txt

     1	--- hello	2011-09-17 22:01:48.584918152 +0800
     2	+++ world	2011-09-17 22:03:02.220931230 +0800
     3	@@ -1,4 +1,4 @@
     4	-应该杜绝文章中的错别字。
     5	+应该杜绝文章中的错别字。 
     6	 
     7	 但是无论使用 
     8	 * 全拼,双拼 
     9	@@ -6,6 +6,6 @@
    10	 
    11	 是人就有可能犯错,软件更是如此。 
    12	 
    13	-犯了错,就要扣工资! 
    14	+改正的成本可能会很高。 
    15	 
    16	-改正的成本可能会很高。
    17	+但是“只要眼球足够多,所有Bug都好捉”,这就是开源的哲学之一。

  第1行和第2行分别记录了原始文件和目标文件的文件名及时间戳。以三个减号(---)开始的行标识的是原始文件,以三个加号(+++)开始的行标识的是目标文件。 

  在比较内容中,以减号(-)开始的行是只出现在原始文件中的行。 

  在比较内容中,以加号(+)开始的行是只出现在目标文件中的行。 
  在比较内容中,以空格开始的行,是在原始文件和目标文件中都出现的行,这些行是用作差异比较的上下文。 

  第3-8行是第一个差异小节。每个差异小节以一行差异定位语句开始。第3行就是一条差异定位语句,其前后分别用两个@ 进行标识。 

  第3行定位语句中 -1,4 的含义是:本差异小节的内容相当于原始文件的从第1行开始的4行。而第4、6、7、8行是原始文件中的内容,加起来刚好是4行。 

  第3行定位语句中 +1,4 的含义是:本差异小节的内容相当于目标文件的从第1行开始的4行。而第5、6、7、8行是目标文件中的内容,加起来刚好是4行。 

  因为命令diff是用于行比较的,所以即使改正了一个字,也显示为一整行的修改。

  第9-17行是第二个差异小节。第9行是一条差异定位语句。 

2.命令patch相当于diff的反向操作

  有了 hello 和 diff.txt 文件,可以放心地将 world 文件删除或用 hello 文件将 world 文件覆盖。用下面的命令可以还原 world 文件: 

$ cp hello world 
$ patch world < diff.txt

  也可以保留 world 和 diff.txt 文件,删除 hello 文件或用 word 文件将hello 文件覆盖。用下面的命令可以恢复 hello 文件: 

$ cp world hello 
$ patch -R hello < diff.txt

  命令 diff 和 patch 还可以对目录进行比较操作,这也就是 Linus 在 1991~2002 年用于维护 Linux 不同版本间差异的办法。在没有版本控制系统的情况下,可以用此命令记录并保存改动前后的差异,还可以将差异文件注入版本控制系统(如果有的话)。 

  标准的 diff 和 patch 命令存在一个局限,就是不能对二进制文件进行处理。对二进制文件的修改或添加会在差异文件中缺失,进而丢失对二进制文件的改动或添加。Git 对差异文件格式提供了扩展支持,支持二进制文件的比较,解决了这个问题。

转载于:https://www.cnblogs.com/qinz/archive/2011/09/17/2179941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值