关键词:
diff是UNIX系统下很重要的工具程序。diff 命令比较文本文件。它能比较单个文件或者目录内容,一般用于版本控制,可以比较两个版本间的代码差异,并制作成补丁文件。
diff命令时代码版本管理的基石之一。我们可以在命令行下,输入:
$ diff <变动前的文件> <变动后的文件>
然后diff命令会自动执行比较,显示出两个文件不同的部分。例如:
一、diff有三种格式
* 正常格式(normal diff) * 上下文格式(context diff) * 合并格式(unified diff)
我们使用两个例子
第一个文件叫做f1,内容是每行一个a,一共7行。
a
a
a
a
a
a
a
第二个文件叫做f2,修改f1而成,第4行变成b,其他不变。
a
a
a
b
a
a
a
三、正常格式的diff
我们比较下两个文件。
$ diff f1 f2
这时diff会显示正常格式的结果
4c4 < a --- > b
第一行是一个提示,用来说明变动位置。它分成三个部分:前面的"4",表示f1的第4行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion);后面的"4",表示变动后变成f2的第4行
四、上下文格式的diff
上下文格式的diff,它的使用方法是加入c参数(代表context)。是上个世纪80年代加州大学伯里克分校推出的。
$ diff -c f1 f2
显示结果如下:
*** f1 2012-08-29 16:45:41.000000000 +0800 --- f2 2012-08-29 16:45:51.000000000 +0800 *************** *** 1,7 **** a a a !a a a a --- 1,7 ---- a a a !b a a a
五、合并格式的diff
如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。
它的使用方法是加入u参数(代表unified)。
$ diff -u f1 f2
显示结果如下:
--- f1 2012-08-29 16:45:41.000000000 +0800 +++ f2 2012-08-29 16:45:51.000000000 +0800 @@ -1,7 +1,7 @@ a a a -a +b a a a
它的第一部分,也是文件的基本信息。
--- f1 2012-08-29 16:45:41.000000000 +0800
+++ f2 2012-08-29 16:45:51.000000000 +0800
"---"表示变动前的文件,"+++"表示变动后的文件。
第二部分,变动的位置用两个@作为起首和结束。
@@ -1,7 +1,7 @@
前面的"-1,7"分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,"7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,"+1,7"表示变动后,成为第二个文件从第1行开始的连续7行。
第三部分是变动的具体内容。
a
a
a
-a
+b
a
a
a
除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。
六、git格式的diff
版本管理系统git,使用的是合并格式diff的变体。
七、参考资料:
读懂diff
转自:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html作者: 阮一峰日期: 2012年8月29日 diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。你在命令行下,输入... 查看详情
git(代码片段)
-git本地版本回退与远端版本回退(回滚)-tsq292978891的博客-CSDN博客Git-BookGit查看版本改动——gitdiff-AsheAndWine的博客-CSDN博客读懂diff-阮一峰的网络日志sudoaptinstallgitgitinitgitadd.gitcommit-am1gitlog--pretty=onelinegitreset--hardHEAD^ 查看详情
sh混帐:diff(代码片段)
[1].array.diff(代码片段)
DescriptionYourgoalinthiskataistoimplementadifferencefunction,whichsubtractsonelistfromanotherandreturnstheresult.Itshouldremoveallvaluesfromlista,whicharepresentinlistb,suchasarray_diff([1,2],[1])==[ 查看详情
深入理解react:diff算法(代码片段)
目录序言React的核心思想传统diff算法Reactdiff两个假设三个策略diff具体优化treediffcomponentdiffelementdiff小结参考1.序言此篇文章所讨论的是React16以前的Diff算法。而React16启用了全新的架构Fiber,相应的Diff算法也有所改变,不在这篇文... 查看详情
elasticsearch一文读懂(代码片段)
目录1、Elasticsearch简介2、Docker安装 Elasticsearch2.1使用Docker安装ElasticSearch7.6.22.2Elasticsearch目录详解2.3 使用Docker安装elasticSearch--head通过Chrome插件安装ElasticSearch-head 2.4了解ELKELK功能结构图Docker安装Kibana 3ElasticSe 查看详情
modelmapper一文读懂(代码片段)
目录1、ModelMapper简介1.1引入ModelMapper的依赖 1.2进行Mapping映射1.3ModelMapper工作原理 2、ModelMapper基础操作 2.1ModelMapper基本映射2.2 ModelMapper集合转换 2.3 ModelMapper指定默认值 2.4 ModelMapper属性值转换 2.5 ModelMapper属性值跳过 ... 查看详情
markdownyaml-diff.md(代码片段)
pythoncsv_diff.py(代码片段)
phpphparray_diff()完全比较(代码片段)
sh用diff创建一个补丁(代码片段)
swiftlcs-diff.swift(代码片段)
fastdfs一文读懂(代码片段)
目录FastDFS介绍FastDFS概念FastDFS作用FastDFS优缺点 FastDFS相关概念FastDFS原理FastDFS系统拓扑图FastDFS核心工作流程FastDFS文件上传FastDFS文件下载 Linux环境搭建FastDFSDocker环境搭建FastDFSSpringBoot封装FastDFS功能模块FastDFS介绍FastDFS概念FastDFS... 查看详情
mapstruct一文读懂(代码片段)
目录1、MapStruct简介1.1MapStructMaven引入 2、MapStruct基础操作 2.1MapStruct基本映射 2.2MapStruct指定默认值2.3MapStruct表达式2.4MapStruct时间格式2.5MapStruct数字格式3、MapStruct组合映射3.1多参数源映射3.2使用其他参数值 3.3嵌套映射 3.4 逆... 查看详情
ruby无花果diff.rb(代码片段)
[转帖]一文读懂http/2(代码片段)
一文读懂HTTP/2http://support.upyun.com/hc/kb/article/1048799/又小拍 ? 发表于:2017年05月18日15:34:45 ? 更新于:2017年05月24日15:06:11今天,HTTP1.1已经变成互联网中主要的协议。但是在HTTP协议诞生初期却被认为是简单直接的协议... 查看详情
xtools(代码片段)
xtools-----标准数据统计,主要是命令次数的统计,transactioninsCom_insert(diff)updCom_update(diff)delCom_delete(diff)selCom_select(diff)tpsCom_insert+Com_update+Com_delete(diff)-----线程处理,threadsrunThreads_runningconThrea 查看详情
myers‘diff之线性空间细化(代码片段)
Myers’diff前言在学习完上一篇文章Myers’Diff之贪婪算法之后,我对Android源码中的DiffUtil类进行了阅读发现其算法的实现和文章中的方式并不尽相同,而是在其基础之上再次进行的优化。所以本篇文章是以上一篇Myers’Diff... 查看详情