给定两个文件,git diff或任何diff工具如何判断已添加,修改或删除了哪些行?
是否有可能无法识别已编辑行的正确状态的极端情况?
编辑:这个问题更与如何发生差异的实际方法有关
Git存储快照:给定您选择的任意两个快照,Git会将您想要比较的文件1提取到临时区域2,然后在这两个文件上运行“差异引擎”。该引擎的结果是(或应该是)一系列指令,这些指令在应用后会将左侧文件转换为右侧文件。
Git有几个内置的差异引擎,Git称之为:
myers
:这使用Eugene W Myers的算法进行了一些细微修改。关于Myers diff有许多StackOverflow问题和答案:Myers diff算法与Hunt-McIlroy算法;差异算法?(关于Myers diff的多个答案,但有几个);Myers的差异:为什么V [k − 1] <V [k + 1]保证选择其他D路径?
minimal
:与之相同,myers
但由于长的编辑脚本,分而治之的分度部分开始表现不佳时,它做得更快,而不是做得最小。从某种意义上讲,这是真正的Myers算法。
patience
:Bram Cohen的算法;请参阅“在哪里可以找到差异算法”的公认答案?
histogram
:一种修改,patience
旨在不意外地在仅支撑大括号的行上进行同步。
它还可以运行您选择的外部差异引擎。
1或至少是它要比较的那些。如果您正在比较实际上不在提交中的文件,则它们可能已经被提取。
2 Git主要在内存中执行此操作,但是在运行外部差异时,确实确实使用了临时文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句