Git提供了这4种差异算法,但没有进一步的信息来说明它们之间的区别。
每种算法的优点是什么?是否有各种情况下算法表现不同的比较?
我认为有多个算法被支持,因为在所有情况下没有一个算法是最好的选择。
差异在于修补程序输出的易读性和生成修补程序所需的处理时间。
总的来说,这就是我理解的区别:
这里是Myers、Patience和Histogram速度的比较: http://marc.info/?l=git&m=133103975225142&w=2
这里是直方图与迈尔斯算法的diff输出对比: http://marc.info/?l=git&m=138023003519837&w=2
尽管只比较了Myers和Histogram两种算法,但这可能会有所帮助。Nugroho等人的研究揭示了这两种diff
算法之间的差异程度。该研究进行了3次比较,即指标、SZZ算法和补丁。从指标和SZZ的比较中,我们可以看到Myers和Histogram在识别不同代码更改数量方面存在很大差异。虽然这些diff
都没有错误地描述变化,但从手动补丁的比较中,Histogram算法提供了一个更好地描述人类变更意图的合理diff
输出。
diff
可执行文件。在Git开始使用自己的版本的xdiff
时,为了避免分叉diff
的开销,xdiff
的算法是由Myers进行了大量修改,并被称为Myers'算法。 - underscore_d