由于与Git 2.15, git show
now supports选项移动的行的--color-moved
检测。它适用于跨文件移动。
是否存在一种配置,它在默认情况下适用--color-moved
选项混帐的方法吗?
git diff
的文件应进行检查。运行下一个命令上色感动代码:
git config --global diff.colorMoved default
注意:使用Git 2.19(Q3 2018),在 “git diff --color-moved
” 功能已经进一步调整了。
见commit 626c0b5,通过commit ca1f4ae commit e2fe6ab(2018年7月18日),和commit b309571,commit 51da15e,commit ee1df66,commit 3783aad,commit 74cfa7b,commit 21c770b,commit 25790be,Stefan Beller (stefanbeller
)(2018年7月16日)。
(通过在Junio C Hamano -- gitster
-- commit a81575a合并,2018年8月2日)
首先,新的默认选项为块,没有斑马线
diff.c
:添加一个块模式移动代码检测新的“
blocks
”模式提供普通和斑马之间的中间地带。 这是直观(几个颜色)为纯的,但仍具有最少线/字符移动到计数的块的要求。
使用git config --global diff.colorMoved default
设置时,所以记住这一点。
默认模式(见git diff
modes)将块,不再斑马。
然后块带有空格的管理:
diff.c
:添加空白模式移动检测,允许缩进变化
--color-moved
的选项已被证明在邮件列表中所观察到的是有用的。然而有时重构时的缩进的变化,例如一个分区的功能成更小的辅助函数的代码通常大多四处移动,除了在凹部的降低时。只是查看移动代码忽略缩进的变化,一个模式,忽略移动检测空格作为在先前的补丁中实现就足够了。但是整体搬迁作为着色动机在提交2e2d5ac(diff.c:彩色移动的行不同,2017年6月30日,Git的v2.15.0),提出了评论者的观点能够信任的“块”的举动。
由于有语言如Python,这取决于适当的相对缩进程序的控制流程,忽略了一个块中的任何空白变化不会坚持2e2d5ac,允许审阅者较少关注块内的承诺作为内部审阅要承担同样的程序流程。
这种新的空白无知模式会考虑到这一点,并只允许每行每块相同的白色空间的变化。这个补丁甚至只允许在行的开头相同的变化。
由于这是一个白的空间模式,它是由专用于在移动检测其他空白模式。
这个补丁带来了一些挑战,涉及到检测块。 我们需要一个大网捕捉到可能移动的行,但随后需要缩小到检查块仍然完好无损。考虑下面这个例子(忽略块大小):
- A
- B
- C
+ A
+ B
+ C
在检查时,如果有一个
A
相对物的块的开始,我们必须忽略所有的空间变化。然而,在下面的行,我们必须检查缩进变化保持不变。检查是否压痕变化确实保持不变,通过计算在线路长度的差异缩进改变完成,然后假设的变化仅仅是在较长线的开始,共尾是一样的。这就是为什么测试包含线,如:
- <TAB> A
...
+ A <TAB>
...
作为开始块的第一行是使用比较功能,忽略空格不像块,其中白色空间增量被考虑用于比较的休息抓到,我们还必须考虑以下情况:
- A
- B
- A
- B
+ A
+ B
+ A
+ B
当检查,如果第一
A
(无论是在+
和-
线)是一个数据块的起始,我们必须检查所有“A
”,并记录所有的白色空间增量,使得我们可以发现上面的例子是只有一个街区这是缩进。
并且在Git的2.21(再次)调整了(Q1 2019)
通过commit 0cd51e9见commit 21536d0,commit 7a4252c,commit b0a2ba4,commit 2034b47,commit 10acc5f,commit b73bcba,commit 748aa1a,commit fbafb7c,Phillip Wood (phillipwood
)(2018年11月23日)。
(通过在Junio C Hamano -- gitster
-- commit 15b07cb合并,2019年1月29日)
即使你已经设置此为默认值,你可以用--no-color-moved
暂时将其关闭
关闭移动检测。 这可以用来覆盖配置设置。这是一样的
--color-moved=no
。
和:
diff --color-moved-ws
:处理空行当使用
--color-moved-ws=allow-indentation-change
,允许使用相同的缩进改变线路跨空行进行分组。 现在如果空行已被移动为好,不是块那些刚刚过它们的缩进改变这仅适用。这样就完成了更改
--color-moved=allow-indentation-change
的实施。 运行:git diff --color-moved=allow-indentation-change v2.18.0 v2.19.0
现在只需5.0S。 这是从8.5s前一个执行的优化版本和66%,从原来的历时14.6s的41%的节省。