Git 缓慢枚举不存在的未跟踪文件

Git enumerates nonexistent untracked files slowly

我正在使用 git 对存储库进行源代码控制。最近它开始警告我使用 git status:

时枚举未跟踪文件需要多长时间
$ git status
On branch my_branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   My_Project/my_source.c


It took 3.24 seconds to enumerate untracked files. 'status -uno'
may speed it up, but you have to be careful not to forget to add
new files yourself (see 'git help status').
no changes added to commit (use "git add" and/or "git commit -a")

但是,此存储库中没有未跟踪的文件 – 我检查过 git status -uall。其他一些可能相关的信息:

为什么 git 枚举不存在的未跟踪文件需要这么长时间?


以下是一些相关的其他问题:

只是为了澄清作者在最新评论中给出的解决方案:

I've replaced my drive and since not encountered this issue.

问题不在 git 本身,而是在计算机硬件上。
更换 HD 后 - 问题已解决。

首先,我想感谢 Sven Marnach 上面的评论,基本上给了我这个解决方案。

问题:我也有这个问题,但是我的硬盘is/are没问题。在 SSD 驱动器上执行 "git status" 需要 3-5 秒,在磁性驱动器上需要 4-8 秒。做了几次之后就快多了。我还看到了这个关于枚举未跟踪文件的时间太长的错误,但我没有要提交的更改。

快速解决方案:删除任何被您隐藏的文件。git忽略文件。

更好的解决方案:停止在源代码管理的同一目录中构建。

为什么: Git 仍然要遍历所有未跟踪的文件,看看是否有新文件,然后将它们与中的条目交叉引用.git无视。这个错误并不是说你有文件需要签入,而是说这些天要花很长时间才能确定是否有文件需要签入。

在没有文件被 git 忽略和 SSD 驱动器隐藏的干净结帐中,运行 "git status" 需要 0.8 秒。

最后一点:这是一个非常古老的项目,我们有一个非常大的 .gitignore 文件。我怀疑将 100 个条目减少到一个目录中也会有所帮助,但不幸的是,我们在每个已签入的输出目录中都有一些文件。

我的解决方案是删除.gitignore中的完整文件路径,并在可能的情况下忽略目录

请注意我的 gitignore 有 15000 行长。