Git状态需要很长时间才能完成

时间:2009-07-26 04:59:43

标签: windows git

我正在使用git来管理Windows机器上本地目录中的文件 - 这里不涉及任何网络,我不是推送或拉出另一台机器。我的目录中可能包含100个文件,所有测试文件都非常小。当我运行git status时,通常需要20-30秒才能完成。这是正常的吗?有什么我可以做的加快速度,或者更好的方式来查看我的存储库的状态(更改的文件,未跟踪的文件等)?其他git命令似乎完成得更快。

14 个答案:

答案 0 :(得分:99)

您是否尝试过 git gc ?这清除了git repo中的残余。

答案 1 :(得分:7)

您使用的是某种病毒防护软件吗?也许这会干扰事情。 git对于我来说非常快,在拥有1000个文件的存储库的窗口上。

答案 2 :(得分:6)

在一个类似的问题上,我发现在我现有的git repo下面的目录中有一个git repo会导致大幅减速。

我将辅助git repo移动到其他地方,现在速度很快!

答案 3 :(得分:4)

由于某些原因,将存储库文件夹移动或复制到新位置后 div.sidebar { position: absolute; width: 250px; height: 100%; z-index: 99; background-color: black; } 特别慢。

在这种情况下,后续运行通常会更快。

答案 4 :(得分:3)

你尝试过重新包装吗? git-repack

否则,请尝试复制目录,并删除重复目录中的.git文件夹。然后创建一个新的git目录,看看它是否仍然很慢。

如果它仍然很慢,那么这听起来像是系统或硬件问题。 Git在不到5秒的时间内完成了数百个文件的状态。

答案 5 :(得分:3)

对我来说,之所以缓慢,是因为有许多未跟踪的文件(脚本中的临时文件和输出文件。)运行git status -uno,它将未跟踪的文件排除在外,运行速度更快,并且符合我的要求

答案 6 :(得分:2)

对我来说,问题是我将很多不同的存储库克隆到我的本地硬盘驱动器上,你拥有的存储库越多,运行git status等命令所需的时间越长。

我只是删除了很多本地不再需要的回购,我的git状态从1分钟到5秒。

我在这里看不到任何类似的答案。

答案 7 :(得分:1)

git status的另一个方面是改进(在Git 2.14.x / 2.15,2017年第4季度),它同时显示被忽略的文件(git status --ignored

  

git status --ignored”,注意到没有任何目录   跟踪路径被忽略,仍然枚举所有被忽略的路径   目录,这是不必要的   代码路径已经过优化,以避免这种开销。

commit 5aaa7fdJameson Miller (jamill)(2017年9月18日) Junio C Hamano -- gitster --合并于commit 075bc9c,2017年9月29日)

  

提高git status --ignored

的效果      

当要列出非空的忽略目录时,提高目录列表逻辑的性能。为了显示非空的忽略目录,现有逻辑将递归迭代忽略目录的所有内容   此更改引入优化,以便在找到第一个文件后停止迭代内容。这可以显着提高存储库中“git status --ignored”的性能,并在忽略的目录中包含大量文件。

     

有关示例存储库的性能差异示例   400个被忽略目录中的196,000个文件:

| Command                    |  Time (s) |
| -------------------------- | --------- |
| git status                 |   1.2     |
| git status --ignored (old) |   3.9     |
| git status --ignored (new) |   1.4     |

要获得更多改进(在Git 2.17,2018年第二季度中设置),请参阅this answer

答案 8 :(得分:1)

我的git status非常慢(最多一分钟),因为全局.gitignore文件位于我的windows userprofile中,该文件存储在无法访问的网络共享中。

git config --global core.excludesfile
显示类似\\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt

的内容

由于某种原因\\Nxxxx0无法访问,我的用户配置文件是从备份系统\\Nxxxxx1加载的。花了一些时间来解决这个问题,因为通常我的userprofile被企业启动脚本绑定到驱动器号,访问该驱动器号就像往常一样工作。 我不确定为什么git-config使用网络共享而不是驱动器号(可能是一个年轻的我应该受到责备)

设置后git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt git status恢复正常速度。

答案 9 :(得分:1)

运行git fsck过去已经为我解决了这个问题。

答案 10 :(得分:0)

就我而言,由于git status作为与项目中文件所有者不同的用户运行,导致速度缓慢。

虽然不适用于所有实例,但对当前用户来说,简单的chown可能会有所帮助。

答案 11 :(得分:0)

较旧版本的git的git状态存在性能问题-有关更多信息,请参见Ways to improve git status performance

git 2.13有1个修复,而其他2.17个已修复。我从2.7移到2.23,它解决了慢速状态。计划在不久的将来完成2.24的另一项改进。

答案 12 :(得分:0)

就我而言,这个 git 目录中有一个巨大的 ZIP 文件。 *.zip 也是 .gitignore 文件中的一行:

CMakeCache.txt
CMakeFiles
Makefile
cmake_install.cmake
[...]
*.csv
*.zip
[...]

我已将此 zip 文件 (~915 MB) 移至其他文件夹,这解决了问题。

答案 13 :(得分:-10)

尝试从结帐的新克隆开始。

git clone myrepo mynewrepo

然后在mynewrepo中执行git状态。

或者,如果您更勇敢,请清理现有结帐中的垃圾。

git clean -dfx

这可以避免git必须扫描一些(可能很大的)被忽略或未签入的文件。