有没有办法配置git默认应用`--color-moved`选项?

时间:2018-01-06 10:40:43

标签: git git-config

Git 2.15, git show now supports开始,使用--color-moved选项检测移动的行。它适用于跨文件移动。

有没有办法配置git默认应用--color-moved选项?

2 个答案:

答案 0 :(得分:1)

应检查zip -r zipfilename.zip * 的文档。运行下一个命令以着色移动的代码:

git diff

答案 1 :(得分:0)

注意:在Git 2.19(2018年第三季度)中,“ git diff --color-moved”功能得到了进一步调整。

请参见commit 626c0b5commit ca1f4ae(2018年7月18日)和commit e2fe6abcommit b309571commit 51da15ecommit ee1df66,{{3} },commit 3783aadcommit 74cfa7bcommit 21c770b(2018年7月16日)由commit 25790be
(由Stefan Beller (stefanbeller)Junio C Hamano -- gitster --中合并,2018年8月2日)

首先,新的默认选项是块,而不是斑马

  

diff.c:添加用于移动代码检测的阻止模式

     

新的“ blocks”模式在平原和斑马之间提供了中间地带。
  它和普通字体一样直观(很少有颜色),但是仍然要求最少的行/字符才能将移动的块计数。

  • 对于块,不能将相邻的块区分开。
  • 对于斑马来说,两种颜色之间的变化表示检测到新的块。

因此,使用commit a81575a设置时请记住这一点。
默认模式(请参阅git config --global diff.colorMoved default)将是块状,不再是斑马线。


然后,空格管理附带了一个块:

  

diff.c:添加空白模式以移动检测以允许缩进更改

     

事实证明,--color-moved的选项非常有用。   邮件列表。但是,当重构时,缩进有时会改变,   例如,将功能划分为较小的辅助功能时   该代码通常会四处移动,除了减少缩进。

     

仅查看移动的代码而忽略缩进的更改,这是一种模式   忽略上一个补丁中实现的移动检测中的空格   足够了。但是,整个移动着色是出于提交的动机   git diff modes(差异:颜色以不同的方式移动线,2017-06-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(2019年第一季度)中对其进行了调整

请参见2e2d5accommit 0cd51e9commit 21536d0commit 7a4252ccommit b0a2ba4commit 2034b47commit 10acc5f,{{3} },commit b73bcba(2018年11月23日)通过commit 748aa1a
(由commit fbafb7cPhillip Wood (phillipwood)中合并,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.0秒。
  对于以前的实现的优化版本,这比8.5s节省了41%,比原来的14.6s节省了66%。