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

标签 git git-status

我正在使用 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 status 确实需要几秒钟才能运行时出现。
  • 目前我的存储库有 130.6 MB。
  • 我的构建产品都是树外的。

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


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

最佳答案

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

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

快速解决方案:删除任何被 .gitignore 文件 stash 的文件。

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

原因:Git 仍然需要遍历所有未跟踪的文件,查看是否有任何新文件,然后将它们与 .gitignore 中的条目进行交叉引用。这个错误并不是说你有文件需要 checkin ,而是说现在需要很长时间才能确定是否有文件需要 checkin 。

在干净的 checkout 中,没有要被 git ignore stash 的文件和 SSD 驱动器,运行“git status”需要 0.8 秒。

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

关于Git 缓慢枚举不存在的未跟踪文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156648/

相关文章:

git - 根据 config.xml 更新 cordova 插件

Git - 比较本地和远程而不先获取?

Git状态与不同的远程比较

git-status - 编辑并提交到本地存储库后,Git 状态不显示 'ahead of'

Git 看到重复的修改文件

GitLab webhook 错误 'Hook Execution Failed'

android - Git Bash (Windows 7) : sh. exe 上出现错误:android:找不到命令

git - TortoiseGit - 还原?

git - 如何排除在执行 'git status' 命令时显示的不需要的文件夹内容

git - 如何在未跟踪的目录上执行 'git status'?