8

前言

这个问题是关于理解基本的统一差异输出格式。三路差异和合并可能是通过适当的 GUI 合并工具或至少使用 vim 差异模式与fugitive.vim之类的插件来完成的最佳方法。

问题

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

很明显,在比较相同数据的三个不同版本时,我们需要比仅比较两个版本时更多的信息。但是这些列实际上是什么意思?对于给定行现在所属的可能“桶”,现在显然有更多组合。它以前只是空白(相同)、+(添加)或-(删除),现在我们有空白、++--+  +-  -。可能还有更多我没见过的。

4

2 回答 2

3

您指的是“组合差异格式”。原始 uni-diff 格式的这种扩展处理两个或多个文件作为输入,一个文件作为结果合并。此格式在 git-diff 命令手册的“组合差异格式”部分中有详细描述。

于 2013-08-29T08:09:53.397 回答
1

请注意,git diff“combined diff format”,每列一列fileN被添加到输出行以注意 X 的行与它的不同之处,生成成本可能很高

Kirill Smelkov最近提交的 72441af(2014 年 4 月)对于现在如何优化这种差异非常有指导意义(对于 Git 2.x,2014 年第三季度)

D(A,P2)是巨大的,因为如果merge-base和是下面AP2几十个合并(从A,通过第一个父级),那D(A,P2)将是从几个子系统到 1 个子系统的合并总和。

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

于 2014-06-24T16:40:25.083 回答