如何阅读Git 3路统一差异输出格式?

时间:2013-05-29 17:39:37

标签: git

前言

这个问题是关于理解基本的统一差异输出格式。三种方式的差异和合并可能是最好的方法,从适当的GUI合并工具的舒适性,或至少,vim差异模式与插件,如fugitive.vim

问题

我发现在合并冲突时运行git diff会产生一个包含两列优缺点的差异视图。

很明显,在比较相同数据的三个不同版本时,我们需要的信息比仅比较两个时更多。但这些专栏究竟意味着什么呢?现在显然有很多组合可用于现在属于给定线的可能“桶”。它过去只是空白(相同),+(已添加)或-(已删除),现在我们有空白++--,{{1 },+  +- 。甚至可能还有更多我没见过的东西。

2 个答案:

答案 0 :(得分:3)

您指的是'组合差异格式'。原始uni-diff格式的这种扩展将两个或多个文件作为输入处理,将一个文件作为结果合并处理。此格式作为'combined diff format' section of the git-diff command manual.

的一部分详细描述

答案 1 :(得分:2)

请注意,每个fileN都有一列的git diff "combined diff format"会被添加到输出行,以便注意X的行与其不同,生成成本可能

来自commit 72441af的最近Kirill Smelkov(2014年4月)非常有助于如何优化这种差异(对于Git 2.x,2014年第3季度)

  

D(A,P2)非常庞大,因为merge-base AP2的{​​{1}}是几十个合并(来自A,通过第一个父级), D(A,P2)将从几个子系统合并到1个子系统。

     

解决方案是避免计算n个1父差异,并通过同时扫描A和所有Pi树,在比较条目的每个步骤中找到更改为所有父路径,并且基于在该比较中,填充路径结果,并推断我们可以跳过 递归到子目录中,如果至少对于1个父目录,该目录树的sha1与{{{ 1}}。
  这将使我们免于做大量不必要的工作。