为什么移动的代码在git diff中不着色?
我安装了最新的git,并将其配置为突出显示移动的代码:为什么移动的代码在git diff中不着色?,git,git-diff,Git,Git Diff,我安装了最新的git,并将其配置为突出显示移动的代码: $ git config diff.colormoved default 下面是移动代码时的外观(请参见1->2) 但3-4不会突出显示为移动代码 以下是独立的更改: 参见git diff(1)中的--color moved/color moved文档: --颜色移动[=] 移动的代码行的颜色不同。它可以通过diff.colorMoved配置设置进行更改。如果未提供选项,则默认为no;如果未提供无模式选项,则默认为zebra。该模式必须
$ git config diff.colormoved default
下面是移动代码时的外观(请参见1->2)
但3-4不会突出显示为移动代码
以下是独立的更改:
参见git diff(1)中的
--color moved
/color moved
文档:
--颜色移动[=]
移动的代码行的颜色不同。它可以通过diff.colorMoved
配置设置进行更改。如果未提供选项,则
默认为no
;如果未提供无模式选项,则默认为zebra
。该模式必须是以下模式之一:
- 否
移动的线不会高亮显示 - 默认值
是斑马的同义词。这可能会在未来转变为更明智的模式 - 普通的
在一个位置添加而在另一个位置删除的任何行都将使用color.diff.newMoved着色。同样地 color.diff.oldMoved将用于添加的已删除行 在差异中的其他地方。此模式拾取任何移动的线,但 在审查中不是很有用 确定代码块是否在没有排列的情况下移动 - 斑马
贪婪地检测至少20个字母数字字符的移动文本块。使用以下两种方法之一绘制检测到的块: 颜色差异{旧的,新的}移动的颜色或 颜色差异{旧,新}移动替代。两者之间的变化 颜色表示检测到新块 - 暗纹斑马
与zebra类似,但会对移动代码中不感兴趣的部分执行额外的调光。两个相邻区块的边界线 被认为是有趣的,其余的则无趣
zebra
,并且它检测
至少包含20个字母数字字符的移动文本块
<代码>我的$ctx=班次代码>不包含至少20个字母数字字符。如果您使用
git diff--color moved=plain
,或在行尾添加#十个ANs
,您的示例将突出显示为moved。注意,还有一种情况是,彩色移动代码(当代码量足够时)会产生不适当的副作用:“
git diff--color moved--cc--stat-p
”由于color moved中的一个bug与其他bug之间存在有趣的交互,因此无法正常工作
这已在Git 2.21(2019年2月)中修复
参见,,,,(2019年1月24日)by.(于2019年2月5日合并) 差异:使用后清除发出的符号标志 当组合使用“
log--color moved
”时,会出现一个奇怪的错误
“--cc--stat-p
”:合并提交的stat显示错误
随着下一次提交的差异
包含的测试说明了问题。我们的历史是这样的:
A-B-M--D
\ /
C
当我们从D
开始运行“git log--cc--stat-p--color moved
”时,我们得到
这一系列事件:
D
的diff正在使用-p
,因此diff\u flush()
调用
diff\u flush\u patch\u all\u file\u pairs()
。在那里我们看到o->color\u移动了
是有效的,因此我们将o->emissued\u符号
指向一个静态本地
结构,导致diff\u flush\u patch()
将符号排队,而不是
实际写出来。
然后我们进行移动检测,发出符号,并清除
结构。但我们将o->发出的\u符号
指向我们的结构
M
的差值。这是一个合并,所以我们使用
组合差异代码。在
查找路径\u generic()
中,我们计算
每个提交及其父级之间的成对差异。通常这是
使用DIFF\u FORMAT\u NO\u输出完成,因为我们只是在寻找
交叉路径。但是由于“--stat--cc
”显示第一个父级
stat,既然我们正在计算这个差异,我们启用
第一个父级的DIFF\u格式\u DIFFSTAT
。这将输出stat
立即提供信息,避免我们运行单独的
第一个父项稍后会发生差异。
但这一产出将流向何方?通常它直接进入标准输出,
但是因为设置了o->emissued\u符号
,所以我们将其排队。因此,我们
不要为合并提交打印diffstat,因为
这是错误的
接下来,我们计算C
的差值。我们实际上在展示一个补丁
同样,我们最终得到了diff\u flush\u patch\u all\u file\u pairs()
,但是
第2步的排队状态在结构中等待的时间。
我们为C
的diff添加新元素,然后刷新整个
事情我们将M
中的diffstat
作为C
的diff的一部分,这是
错
Ryan的回答是正确的(未更改的颜色部分太短)。同样值得考虑的是,
diff.colorMoved
仍处于实验阶段;它可能会在将来的Git中更改。请注意:11000在[Git]标记中发布