【问题标题】:git status --ignored hangs indefinitelygit status --ignored 无限期挂起
【发布时间】:2020-01-27 10:01:18
【问题描述】:

tl;dr:在我的项目的根目录中运行 git status --ignored 永远不会完成。 git status 工作正常。


我从我的 IDE - PhpStorm 开始看到此问题的症状(尽管此问题适用于所有 IntelliJ IDE)。没有与 git 相关的操作(提交、推送、获取)工作,所有这些操作都会无休止地挂起。查看正在运行的进程,发现有一个git 进程占用了 100% 的 CPU。

杀死 git 进程使 IDE 再次平稳运行了几分钟。似乎它会定期产生同步更改的过程。后来做了一些实验,结果证明这不是 PhpStorm 的问题,而是git 的问题。 git status --ignored 即使从命令行执行也永远不会结束。

【问题讨论】:

  • Git 确实有一些编译路径长度限制。这是在什么操作系统上的?如果您可以在 Linux 上重现此内容,并将示例发送给 Git 人员,他们可能会真正修复长度限制,或者至少修复 Git 以免卡住。
  • 这是在 OSX 上。我会看看它是否在 linux docker 容器和裸机 Linux 服务器上重现。
  • 确认这在 OSX、OSX 上的 Linux-in-docker 和裸机 Linux (ubuntu) 上失败

标签: git intellij-idea phpstorm


【解决方案1】:

就我而言,罪魁祸首是项目路径中的深层目录结构。它一定是由我们的工具堆栈中的某些东西生成的,我没有注意到,因为它有超过 100 个目录深,那里没有实际文件。

cp拒绝复制这个目录,说name too long (not copied)。我猜git 会在这样的目录上绊倒。

删除深层嵌套的目录层次结构为我解决了这个问题,git status --ignored 现在按预期工作。


编辑:已确认这是git 中的一个错误。邮件列表摘录:

没有这样的目录深度限制,但是'git status的运行时 --ignored' 随着未跟踪目录的深度而迅速增长。 运行这个 shell 循环会产生以下数字:

10: 0.01
11: 0.03
12: 0.05
13: 0.11
14: 0.23
15: 0.47
16: 0.97
17: 1.97
18: 3.88
19: 7.85
20: 16.29
21: 32.92
22: 76.24

漂亮的二次方,不是吗? :)

除非我弄乱了我的数字,否则它有 120 个目录的深度 需要超过 6*10^23 年才能完成......所以是的,它确实符合条件 无限期。

【讨论】:

  • 哇,好吧,某种疯狂的 O(n*n) 行为。
猜你喜欢
  • 2015-04-01
  • 2022-11-21
  • 2013-02-22
  • 2017-06-29
  • 2011-05-07
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多