斑马斑马的目的是什么?

时间:2019-09-06 07:35:08

标签: git

git diff具有此功能--color-moved=dimmed-zebra,听起来确实很不错,但我不了解。如果发现zebra非常有用,因为它显示了已移动的块。但是dimmed_zebra在我看来完全是武断的。为什么“两个相邻块的边界线……被认为很有趣”? 此功能如何帮助我更有效地分析差异?如果我理解此功能的预期目的,那么我觉得此功能将非常有用。一个具体的例子可能会有所帮助。

这是联机帮助页中的摘录。

  

斑马

     

贪婪地检测到至少20个字母数字字符的移动文本块。使用color.diff。{old,new} Moved color或color.diff。{old,new} MovedAlternative绘制检测到的块。两种颜色之间的变化表示检测到新的块。

     

变暗的斑马

     

类似于斑马线,但是对移动代码中不感兴趣的部分进行了额外的调光。两个相邻块的边界线被认为很有趣,其余的都没有意思。

2 个答案:

答案 0 :(得分:3)

当修补程序主要由移动或复制的代码组成,并且复制的代码中间更改几行时,dimmed-zebra模式很有用。以a particular commit from Git为例(但是此链接不会显示模式)。

zebra模式显示有两个单独的移动块:前者和后者分别用紫色和蓝色着色,两者都在以后移动,并且在它们之间插入了一行。这是一个移动的节的示例:

The old location of code with zebra highlighting, in blue and purple. The new location of code with zebra highlighting, in light blue with a single added line in green.

很难注意到添加的行;它并没有真正脱颖而出。

dimmed-zebra中,几乎所有移动的代码都是灰色的,因为它最终没有兴趣。用颜色突出显示的唯一内容是第一个块的结尾,第二个块的开始(下一行)以及在目标中添加的行。此模式使您可以专注于(a)添加的行和(b)它们的来源边界,而无需关心任何已移动的代码。

这是dimmed-zebra模式下的代码。请注意,您的眼睛仅被吸引到相关部分:

The old code in dimmed-zebra highlighting, with most of the data in grey. The new code in dimmed-zebra highlighting, with only the added line in green.

因此,基本上,这只是对人类视觉的优化,可以使人们更容易注意到真正重要的事物。

答案 1 :(得分:0)

@ bk2204的答案通过一个很好的例子帮助我理解了,现在我想提供另一个答案。

移动的线条“有趣”而不变暗是什么意思?

当您看到在两个已删除和移动的代码块的边界处的两条突出显示的行时,您应该想到:“这些行不再相邻;在此处插入了一些代码,或者这些块已完全分开。”

同样,当您看到位于两个已添加和移动的代码块的边界处的两条突出显示的行时,您应该想到:“这些行以前不相邻;在这里删除了一些代码,或者这些块完全来自不同的地方”。