在执行git push时警告“diff.renamelimit变量”

时间:2011-10-20 03:15:41

标签: git warnings push

我正在将本地提交推送到远程git服务器并收到以下警告消息:

remote: warning: only found copies from modified paths due to too many files.
remote: warning: you may want to set your diff.renamelimit variable to at least 19824 and retry the command.

但实际上我已经将diff.renamelimit设置为0(我认为零意味着无限制,对吧?)。

$ git config --list
...
diff.renamelimit=0

那么我该怎么做才能避免这种警告?感谢。

2 个答案:

答案 0 :(得分:53)

documentation并未提及0作为diff.renamelimit的特殊值 因此,您应将该限制设置为建议的值 或者您可以尝试完全停用重命名检测。 (git config diff.renames 0

您会在此博客文章“Confluence, git, rename, merge oh my...”中找到类似的示例:

  

正如已经提到的,git尝试在此之后检测文件重命名,例如在使用git loggit diff/merge时。   当试图检测重命名时,git区分精确和不精确的重命名,前者是重命名而不改变文件的内容,后者是重命名,可能包括对文件内容的更改(例如重命名/移动Java类)。
  这种区别很重要,因为用于检测精确重命名的算法是线性的,并且将始终执行,而不精确重命名检测的算法是二次的(O(n^2)),如果更改的文件数超过a,git不会尝试执行此操作某个阈值(默认为1000)。

     

由于最近重组影响的文件数超过此阈值,git只是放弃并将合并解决方案留给开发人员。在我们的例子中,我们可以通过更改阈值来避免手动合并解决方案


注意:Git 2.16(2018年第一季度)将修改该限制:

历史上,用于重命名检测的差异机器有一个 32k路径的硬编码限制;这是为了让用户解除 交易周期(可能)更容易阅读结果。

commit 8997355Jonathan Tan (jhowtan)(2017年11月29日) 请commit 9268cf4查看commit 9f7e4bfcommit d6861d0commit b520abfElijah Newren (newren)(2017年11月13日)。 Junio C Hamano -- gitster --合并于commit 6466854,2017年12月19日)

  

diff:移除renameLimit

的无声钳位      

commit 0024a54(修复重命名检测限制检查; 2007年9月,Git v1.5.3.2)中,renameLimit被限制为32767.
  这似乎是在以下计算中简单地避免整数溢出:

num_create * num_src <= rename_limit * rename_limit
     

虽然它也可以被视为CPU数量的硬编码界限   我们愿意让用户告诉git花在处理上的时间   重命名。
  上限可能有意义,但不幸的是这个上限   bound既没有传达给用户,也没有记录在任何地方。

     

虽然很大的限制会让事情变得缓慢但我们会有用户   欣喜若狂的小五个文件更改正确樱桃挑选甚至   如果他们必须手动指定一个大的限制并等待十分钟   重命名要被检测。

使用“-l0”继续工作的现有脚本和工具,将0视为一个特殊值,表示重命名限制是一个非常大的数字。


Git 2.17(2018年第二季度)将避免在“git diff”输出行的中间显示警告消息。

commit 4e056c9Nguyễn Thái Ngọc Duy (pclouds)(2018年1月16日) (由Junio C Hamano -- gitster --合并于commit 17c8e0b,2018年2月13日)

  

diff.c:在打印重命名警告之前刷新stdout

     

diff输出缓存在FILE对象中,可能仍然存在   我们打印这些警告时会部分缓冲(直接发送到fd 2)   输出像这样搞乱了

 worktree.c                                   |   138 +-
 worktree.h        warning: inexact rename detection was skipped due to too many files.
                           |    12 +-
 wrapper.c                                    |    83 +-
  

如果在打印了图形部件的颜色代码后打印警告,情况会变得更糟。你会收到绿色或红色的警告。

     

首先刷新标准输出,所以我们可以改为:

 xdiff/xutils.c                               |    42 +-
 xdiff/xutils.h                               |     4 +-
 1033 files changed, 150824 insertions(+), 69395 deletions(-)
warning: inexact rename detection was skipped due to too many files.

答案 1 :(得分:52)

git config merge.renameLimit 999999

merge.renameLimit 是什么意思

  

合并期间执行重命名检测时要考虑的文件数;如果未指定,则默认为 diff.renameLimit 的值。

来源:https://git-scm.com/docs/git-merge