我正在分析包含具有类似内容的代码块的文件。问题是这会导致差异混淆。我将从一个例子开始,因为用语言很难解释。
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
)
问题是,差异程序没有识别类型"阻止"的代码块。完全独立于类型" text"的代码块。并应被视为单独的实体。 (在这种情况下Perl的Text::Diff
,但我也有git-diff可用,它也做同样的事情。)
如何让diff将这些不同类型的代码块识别为单独的实体,这样这两个文件的差异会产生以下结果呢?
-text
-(
- contents
-)
block "block1"
(
contents
)
+text
+(
+ contents
+)
block "block2"
(
contents
)
请注意,与我实际尝试diff的代码相比,这是一个极其简化的示例,我知道很容易弄清楚这个示例正在做什么,但是当你处理数百个类似的元素时diff输出变得完全不可读。
我希望差异能够意识到只有一个"文本"在此修改中编辑了代码块,没有"块"代码块被触及了。
答案 0 :(得分:1)
如果您对直接使用git感到满意,请尝试git diff --patience
$ git diff --patience
diff --git a/foo1.txt b/foo1.txt
index b474449..30a91bb 100644
--- a/foo1.txt
+++ b/foo1.txt
@@ -1,11 +1,11 @@
-text
-(
- contents
-)
block "block1"
(
contents
)
+text
+(
+ contents
+)
block "block2"
(
contents
答案 1 :(得分:1)
处理此问题的最佳方法是在manual diff alignments中使用KDiff3。重用一些示例图像,但它与您的示例文件的结果相同: