`
zhuxixi327
  • 浏览: 19822 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

diff文件的格式

阅读更多
diff
参考http://en.wikipedia.org/wiki/Diff
diff是一个比较工具,它比较两个文件,然后输出两个文件的差异,这个差异文件叫做diff文件。它通常被用来找出同一文件两个版本之间的差异。所谓差异,就是指从原文件到新文件增加了哪些,删除了哪些。

diff的算法
实现diff功能的算法基础是最长公共子序列 longest common subsequence problemhttp://en.wikipedia.org/wiki/Longest_common_subsequence_problem.
中文解释见http://hxraid.iteye.com/blog/622462
例如下面两个串
      S1: a b c d f g h j q z
      S2: a b c d e f g i j k r x y z
根据LCS算法(这个算法貌似很复杂,这里略掉了),得到其最长公共子序列(LCS)是:
       LCS: a b c d f g j z
示意图如下:

(这个示意图是不严谨的,因为LCS是有顺序的,而集合却没有顺序性)

根据这个序列,就可以得到S2串和S1串间的差异:
如果某个字符S1中有,LCS中没有,表示S2中删除了这个字符,如上图的‘h’;
如果S2中有,而LCS中没有,则表示S2中增加了这个字符,如上图的“e,I,k,r,x,y”。
其结果如下:
       e  h  i  q  k  r  x   y
       +  -  +  -  +  +  +  +
这个结果就是diff比较后输出的差异文件。

这里diff的是字符串,实际的diff以"行"为单位来比较两个文本文件的。


如何读diff文件格式:

diff文件格式有列举模式,命令模式和上下文模式。

命令模式表示从原文件到新文件需要执行哪些命令才能实现。命令主要就是add,change,del。
命令模式可能主要便于程序自动执行的,人不太好读。

上下文模式则是由区块(chunk)组成的,区块列举原文件和新文件中有不同的地方,因为有上下文,所以更便于阅读。

看上下文模式的:

比如如下两个文件:


其diff的结果文件,上下文格式如下(部分结果):


最开始的两行表示了这个diff文件是哪两个文件间的差异。
@@表示一个区块的开始,这个区块到下一个“@@”为止。


@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
This part of the
document has stayed the
same from version to
-1,3表示原文件的第1行到第3行间;
+1,9表示新文件的第1行到第9行
第3行和第9行,这两个行数不同,表示从源文件到新文件增加了几行。
带加号(+)的行,表示增加的,不带号的,表示原来就有的;

@@ -5,16 +11,10 @@
be shown if it doesn't
change.  Otherwise, that
would not be helping to
-compress the size of the
-changes.
-
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.

It is important to spell
-check this dokument. On
+check this document. On

带减号(-)的,表示删除了这几行。
其余同上。

介绍完毕。

  • 大小: 2.2 KB
  • 大小: 8.4 KB
  • 大小: 4.6 KB
分享到:
评论
3 楼 337240552 2013-03-10  
http://www.ruanyifeng.com/ 这个好理解
2 楼 tonytony3 2012-06-07  
thanks
1 楼 zhuxixi327 2010-10-28  
补充
下面的转自某处,但不记得了:
我之前曾经在一个帖子中回复了这个问题,但是找了一圈没找到。。干脆重敲一遍吧。。

svnbook中给出的场景描述大致是这样,当你修改完bug的时候,
不确定这次修改会不会通过测试,但又不想因为这个尚未测试通过的修改影响主干代码,
所以在修改完成后不提交——改用创建补丁功能将这个版本变化打成一个Patch文件,
提交测试,测试接到这个Patch后可以打在检出的代码上。测试通过后,
开发人员在工作副本中执行Patch,提交。主干保持稳定~

从我个人理解来看,SVN的开发团队比较注重其它配置管理工具优势功能的融合。
单就合并修补bug的代码这一活动,可以用锁(VSS特性)、分枝(CVS特性)、
创建补丁(不知道是谁家特性)。从VSS、CVS移植来的开发人员,都可以很快习惯SVN。
另外,用补丁功能,可以保持配置库内的洁净度(提交次数减少、无效提交次数减少),
可以回避分枝的创建和合并(谁合并代码谁头疼),可以方便版本回溯
(测试不通过就不打补丁提交,不用退回版本)。

暂时想到这么多

相关推荐

    diff命令 文件比较工具 文本比较工具 cygwin中的文本比较工具

    `diff`命令支持多种输出格式,包括上下文格式(-c)、统一格式(-u)和逐行格式(-d)。其中,统一格式通常是最常用的一种,它显示了差异所在的行号,以及上下各三行的上下文信息,便于理解变化的语境。 除了比较...

    diff文件(夹)比对源码 c#

    标题"diff文件(夹)比对源码 c#"指的是使用C#语言开发的文本和文件夹比对的源码实现。通过这样的工具,开发者可以快速地识别代码变动,这对于协同开发和代码审查尤其有用。 描述中提到的两点关键功能是: 1. **...

    WinMerge文件diff工具

    **WinMerge文件diff工具** WinMerge是一款在Windows操作系统下广泛使用的文件差异对比工具,它能够帮助用户快速识别并解决两个文件或目录之间的差异。这款工具以其直观易用的界面、强大的对比功能以及丰富的自定义...

    diff2 diff算法实践

    4. `diff.bpf`和`diff.bpr`:这些可能是某种中间格式的文件,用于存储`diff`算法处理过程中的数据,或者是在特定环境中优化`diff`性能的配置文件。 5. `diff.res`和`diff.tds`:这些可能是资源文件或编译器生成的...

    一个十分好用的hex文件编辑及diff工具

    标题中的“一个十分好用的hex文件编辑及diff工具”指的是该软件主要功能是用于编辑十六进制(hex)格式的文件以及进行差异比较(diff)。在计算机领域,hex编辑器是一种高级工具,允许用户查看和修改二进制文件的...

    jsdiff一个javascript的文本差异比较实现

    2. **段落比较**:除了字符级别的比较,jsdiff还支持对整个段落进行比较,适合处理大型文本文件或多行代码。 3. **HTML高亮**:该库能够生成HTML格式的比较结果,用不同的颜色高亮显示差异部分,使得人眼阅读更直观...

    diff命令 比较文件的差异

    语法格式:diff [参数] [目录] 常用参数: -a diff预设只会逐行比较文本文件 -b 不检查空格字符的不同 -W 在使用-y参数时,指定栏宽 -x 不比较选项中所指定的文件或目录 -X 您可以将文件或目录类型...

    Linux 下 diff 工具源码

    在Linux操作系统中,`diff`是一个非常重要的命令行工具,用于比较两个文件或目录的差异。这个工具在软件开发、版本控制以及系统管理等场景中都有广泛应用。`diff`源码的提供,使得用户可以深入理解其内部工作原理,...

    linux diff 命令说明

    在 Linux 系统中,`diff` 是一个非常重要的命令工具,它主要用于比较两个文本文件之间的差异,并以特定格式输出这些差异。这对于版本控制、代码审查、文件对比等场景极为有用。 #### 二、`diff` 命令的基本概念 1....

    基于Diff算法的文本文件比对工具

    Diff算法是一种广泛应用于文本文件比对的技术,它能够找出两个文本文件之间的差异并生成一个最小的编辑脚本,使得一个文件可以通过这些编辑操作变为另一个文件。这个编辑脚本通常包括插入、删除和替换等操作。在软件...

    diff和patch说明

    2. **输出格式**:`diff`输出可以是统一格式(-u选项)、上下文格式(-c选项)或其他自定义格式,方便用户理解和处理差异。 3. **比较类型**:除了比较两个文件,`diff`还能比较目录,找出目录中文件的不同。 4. **...

    diff工具(多文件夹比较,多文件比较,找不同)

    国外一款diff工具,简洁的英文界面。可比较两个文件夹的异同、两个文件的异同,适用于代码版本比较以及文件备份时的查缺补漏

    diff diff算法实践

    通过找到LCS,diff可以生成一个补丁文件(patch),描述了如何将一个文件转换成另一个文件的指令。 在实践中,diff算法通常包含以下步骤: 1. **分块**:将两个文件分割成多个小块,以便于比较。 2. **匹配块**:...

    DSDIFF Decoder(听iso提取出来的diff文件的插件)

    Foobar 2000播放器听iso提取出来的diff文件的插件,Current version1.4, released on 2011-05-19。接解压去foobar的components目录就可以了

    Windows下的diff,适用于windows10以下任何版本

    `diff`工具的主要用途是对比两个文本文件或者两个目录之间的差异,并以可读的格式输出它们的不同之处。在Windows环境下,这个工具可以用于编写批处理脚本,以便自动化地检查文件或代码的变更,这对于开发者和系统...

    diff(Java实现)

    在IT领域,`diff`是一种广泛使用的工具,用于比较两个文件或文本的差异。这个概念源自于Unix操作系统中的命令行工具,但现在已经被许多其他平台和编程语言所采用,包括Java。`diff`算法的核心在于找出两个文件之间的...

    Linux网络操作系统基础:文件处理wc、sort和diff命令.pptx

    Linux 文件处理命令 - wc、sort 和 diff 命令 Linux 操作系统中,文件处理是日常维护和管理中非常重要的一部分。wc、sort 和 diff 命令是 Linux 中三个非常有用的文件处理命令,本文将详细介绍这三个命令的使用方法...

    java-diff源代码

    这个API包括了多个方法,如`diff()`用于计算两个输入序列的差异,`patch()`用于应用差异到原始序列以生成新的序列,以及`unifiedDiff()`用于生成统一格式的差异报告,这是Git等版本控制系统常用的格式。 **3. 差异...

    文件比较算法剖析 DIff

    文件比较算法剖析 DIff 文件比较算法是计算机科学中的一种常见算法,用于比较两个文本文件的相似度和差异。在这篇文章中,我们将对文件比较算法进行剖析,并详细介绍其实现原理和算法思路。 文件比较算法的主要...

Global site tag (gtag.js) - Google Analytics