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

时间:2015-01-26 18:47:06

标签: 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需要这么长时间才能枚举不存在的未跟踪文件?


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

3 个答案:

答案 0 :(得分:4)

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

问题:我也有这个问题,但我的HD很好。做一个&#34; git status&#34;需要3-5秒。在SSD驱动器上,在磁性驱动器上4-8秒。在我做了几次之后,它的速度要快得多。我也看到这个错误,需要花费很长时间来枚举未跟踪的文件,但我没有提交更改。

快速解决方案:删除.gitignore文件隐藏的所有文件。

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

为什么: Git仍然必须浏览所有未跟踪的文件,查看是否有新文件,然后针对.gitignore中的条目交叉引用它们。这个错误并不是说您有需要签入的文件,而是这些天花了很长时间来确定是否需要签入文件。

在干净的结帐时,git ignore和SSD驱动器没有要隐藏的文件,运行&#34; git status&#34;需要0.8秒。

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

答案 1 :(得分:4)

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

请注意我的gitignore长15000行。

答案 2 :(得分:3)

仅为澄清作者在最新评论中提供的解决方案:

  

我已经更换了驱动器,因为没有遇到过这个问题。

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