【发布时间】:2017-10-02 21:09:25
【问题描述】:
我正在比较包含具有相似内容的代码块的文件。问题是这可能会导致差异混淆。我将从一个例子开始,因为这很难用语言来解释。
file1.txt:
text
(
contents
)
block "block1"
(
contents
)
block "block2"
(
contents
)
file2.txt:
block "block1"
(
contents
)
text
(
contents
)
block "block2"
(
contents
)
当我比较这两个文件时,我得到以下输出:
-text
+block "block1"
(
contents
)
-block "block1"
+text
(
contents
)
block "block2"
(
contents
)
问题是,diff 程序无法识别“块”类型的代码块完全独立于“文本”类型的代码块,应将其视为单独的实体。 (在这种情况下是 Perl 的 Text::Diff,但我也有 git-diff 可用,它做同样的事情。)
如何让 diff 将这些不同类型的代码块识别为单独的实体,以便这两个文件的 diff 会产生以下结果?
-text
-(
- contents
-)
block "block1"
(
contents
)
+text
+(
+ contents
+)
block "block2"
(
contents
)
请注意,与我实际尝试比较的代码相比,这是一个大大简化的示例,我知道很容易弄清楚这个示例在做什么,但是当您处理数百个类似元素时,差异输出变得完全不可读。
我希望 diff 意识到在此修改中只编辑了一个“文本”代码块,而没有触及任何“块”代码块。
【问题讨论】: