是否存在不对不相关的块进行分组的差异算法?
例如:
hello world
lorem ipsum dolor sit amet
VS
Hello World
Lorem Ipsum Dolor Sit Amet
比较这些(例如使用标准Unix diff
)通常会产生以下结果:
< hello world
< lorem ipsum dolor sit amet
---
> Hello World
> Lorem Ipsum Dolor Sit Amet
然而,如下所示的逐行比较似乎更明智:
< hello world
---
> Hello World
< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet
后者,IMO,可以更轻松地分析微小的变化。 (请注意,我在这里关注人类的可读性,而不是机器的可读性。)
我理解差异是一个复杂的问题,但这常常让我感到困惑。
答案 0 :(得分:4)
虽然intentional diff表现得像{{3}},但你可以通过投掷空行来改变它。这将得到你想要的结果。
1:
hello world
lorem ipsum dolor sit amet
Same
2:
Hello World
Lorem Ipsum Dolor Sit Amet
Same
行号必须固定(n / 2 + 1)。
1c1
< hello world
---
> Hello World
3c3
< lorem ipsum dolor sit amet
---
> Lorem Ipsum Dolor Sit Amet
如果多行替换一行,则输出可能仍然不是您想要的:
1,3c1
< hello world
<
< lorem ipsum dolor sit amet
---
> Hello World
答案 1 :(得分:1)
diff算法是longest common subsequence problem的解决方案。但是,似乎你对另一种算法不感兴趣。因为,相关与否,两条线都发生了变化,您所谈论的是文本中差异的呈现方式。
Thomas Jung显示了original format。维基百科显示了一些variations。但是花时间去试验一下。
diff original new
将生成原始格式。
diff -c original new
将产生context format。
diff -u original new
将产生unified format。对于某些琐事,这是最常用的琐事,开源项目的补丁通常是以这种格式请求的。
当然,如果差异呈现给你的方式至关重要,我认为你会发现任何diff viewers都非常优越。