GIT警告:太多文件跳过不精确的重命名检测

Sen*_*mar 59 git git-merge git-config

我知道默认的重命名限制是100,并且可以使用配置"diff.renamelimit config"增加此值

令人担心的是,如果没有设置此配置,是否会有错误的合并,任何丢失的代码?我试图合并(git merge)2个有巨大变化的分支.

有人可以更多地了解这个配置设置吗?

Han*_*Gay 40

您的内容是安全的.

据我了解,git实际上并没有任何一流rename操作的概念(只有bzr三大DVCS):mv在底层机器之上是糖,基本上是adda和a rm.但是,由于git可以跟踪在此类操作期间发生变化的内容,因此可以使用启发式方法来猜测a add和a rm实际上是何时mv.因为这比仅仅显示git实际记录的内容需要更多的工作- 用于git-diff解释它的文档"...需要O(n ^ 2)处理时间,其中n是潜在的重命名/复制目标的数量" - git不会尝试它当涉及太多文件时.您提到的设置只是控制该阈值.

  • "您的内容是安全的" - 但是如果检测错过了在合并的一侧重命名并在另一侧更改的文件,则会发生合并冲突,如果检测到重命名,则可能无法获得这些冲突.合并不会*错误*,但可能需要更多用户努力才能完成. (17认同)
  • 如果有人想知道这个设置是否有用:是的,它可以帮助你在一个分支中合并分支,你已经移动了数百个文件,而在其他分支中你对这些文件进行了很多更改.当我在一个分支上有大量的代码重构和其他正在进行的工作时,我就有这样的情况. (3认同)
  • 谢谢汉克和杰弗罗米。在任何情况下,设置这个“diff.renamelimit 配置”真的有用吗? (2认同)

M3R*_*3RS 25

如果这有助于任何人,我在一个分支中有很多文件(数百个,如果不是数千个),这些文件还没有在另一个分支中.运行

$ git config merge.renamelimit 15345
Run Code Online (Sandbox Code Playgroud)

合并消失后发出以下错误

$ git merge master
.
.
.
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 15345 and retry the command.
Run Code Online (Sandbox Code Playgroud)

  • 另外,设置重命名限制后,在重试合并之前,请调用“git merge --abort”来中止当前正在进行的合并。 (4认同)