我安装了最新的git并对其进行配置以突出显示移动的代码:
$ git config diff.colormoved default
但3-4不会突出显示为已移动的代码。
以下是独立更改:
答案 0 :(得分:10)
请参阅git-diff(1)中--color-moved
/ colormoved
的文档:
--color-moved[=<mode>]
移动的代码行的颜色不同。它可以通过
diff.colorMoved
配置设置进行更改。如果未给出选项,<mode>
默认为no
,如果没有给出模式,则zebra
默认为zebra
。该模式必须是以下之一:
否强>
移动的线条不会突出显示。默认强>
是斑马的同义词。这可能会在未来转变为更明智的模式。<强>纯强>
在一个位置添加并在另一个位置删除的任何行都将使用color.diff.newMoved进行着色。同样 color.diff.oldMoved将用于添加的已删除行 差异中的其他地方。此模式可以拾取任何移动的线,但它 在评论中不是很有用 确定是否在没有置换的情况下移动了代码块。<强>斑马强>
贪婪地检测至少20个字母数字字符的移动文本块。检测到的块使用 color.diff。{old,new}移动颜色或 color.diff {旧的,新} MovedAlternative。两者之间的变化 colors表示检测到新块。<强> dimmed_zebra 强>
与zebra类似,但执行了移动代码的无趣部分的额外调暗。两个相邻块的边界线 被认为是有趣的,其余的都是无趣的。
具体而言,默认值为my $ctx = shift;
并且检测到
至少20个字母数字字符的移动文本块
。 git diff --color-moved=plain
不包含至少20个字母数字字符。如果您使用# ten more ANs
或将Location Button
添加到该行的末尾,则您的示例将突出显示为已移动。
答案 1 :(得分:0)
请注意,在另一种情况下,彩色移动代码(当代码量足够时)会产生不适当的副作用:
“ git diff --color-moved --cc --stat -p
”无法正常运行,原因是色彩移动的错误与其余错误之间存在有趣的互动。
此问题已在Git 2.21(2019年2月)中修复
请参见commit dac03b5,请参见commit 04b19fc,commit 8290faa,commit 8817f0c,commit 48edf3a,commit 426fd36,Jeff King (peff
)(2019年1月24日) 。
(由Junio C Hamano -- gitster
--在commit 5d2710b中合并,2019年2月5日)
diff:使用后清除emitted_symbols标志
将“
log --color-moved
”与组合使用时会出现一个奇怪的错误--cc --stat -p
中的错误:合并提交的状态错误地显示 与 next 提交的差异。包含的测试演示了该问题。
我们的历史看起来像这样:A-B-M--D \ / C
当我们从
git log --cc --stat -p --color-moved
开始运行“D
”时,我们得到 事件的顺序:
D
的差异使用-p
,因此diff_flush()
调用了diff_flush_patch_all_file_pairs()
。在那里,我们看到o->color_moved
有效,因此我们将o->emitted_symbols
指向静态本地 结构,导致diff_flush_patch()
排队符号而不是 实际写出来。
然后,我们进行移动检测,发出符号并清除 结构。但是我们让o->emitted_symbols
指向我们的结构。接下来,我们计算
M
的差异。这是合并,因此我们使用 组合的差异代码。
在find_paths_generic()
中,我们计算 每个提交及其父级之间的成对差异。通常这是DIFF_FORMAT_NO_OUTPUT
完成,因为我们只是在寻找 相交的路径。但是,由于“--stat --cc
”显示了第一祖父母 统计信息,并且由于我们无论如何都要计算差异,因此我们启用了DIFF_FORMAT_DIFFSTAT
为第一位父母。输出状态 立即获取信息,使我们免于单独运行 第一次父母的差异稍后。
但是那个输出去了哪里?通常它直接进入标准输出, 但是由于设置了o->emitted_symbols
,因此我们将其排队。结果,我们 实际不打印合并提交的diffstat(尚未),这 是错误的。
- 接下来,我们计算
C
的差异。我们实际上正在展示一个补丁 再次,所以我们以diff_flush_patch_all_file_pairs()
结尾,但这 我们将第2步中排队的统计信息等待在结构中。
我们为C
的差异添加新元素,然后刷新整个 事情。我们将diffstat
中的M
视为C
的差异的一部分, 错误。所以触发错误确实需要结合所有 这些选项。