我git
用来管理Windows机器上本地目录中的文件-这里不涉及网络,我不是在从另一台机器上推入/拉出。我的目录中可能包含100个文件,所有测试文件都非常小。当我跑步时git status
,通常需要20-30秒才能完成。这正常吗?有什么我可以做来加快速度的方法,还是一种更好的方法来查看存储库的状态(更改的文件,未跟踪的文件等)?其他git
命令似乎可以更快地完成。
我git
用来管理Windows机器上本地目录中的文件-这里不涉及网络,我不是在从另一台机器上推入/拉出。我的目录中可能包含100个文件,所有测试文件都非常小。当我跑步时git status
,通常需要20-30秒才能完成。这正常吗?有什么我可以做来加快速度的方法,还是一种更好的方法来查看存储库的状态(更改的文件,未跟踪的文件等)?其他git
命令似乎可以更快地完成。
Answers:
您尝试过git gc吗?这可以清除git repo中的残留文件。
git status
使用time
命令,并获得了30.464s的“真实”时间。然后我跑了git gc
那么time git status
多次,并获得35.409s的实时性。很奇怪
git status
多次时,后续运行仅占第一次运行的一小部分。所以,如果你正在运行git status
,然后git gc
再git status
再次,它预计它会超快运行。
在类似的问题上,我发现在现有git repo下的目录中有git repo会导致速度大大降低。
我将辅助git repo移动到其他地方,现在速度很快!
您是否尝试过重新包装?混帐重新包装。
否则,请尝试复制目录,然后删除重复目录中的.git文件夹。然后创建一个新的git目录,看看它是否仍然很慢。
如果仍然很慢,则听起来像是系统或硬件问题。Git在不到5秒的时间内为我完成了数百个文件的状态。
由于某些原因 git status
在将存储库文件夹移动或复制到新位置后,它特别慢。
在这种情况下,随后的运行通常会更快。
git status
命令相同的操作,因此可能需要花费相同的时间才能完成。
我的git status
速度非常慢(最多一分钟),因为全局.gitignore
文件位于Windows用户配置文件中,该文件存储在无法访问的网络共享中。
git config --global core.excludesfile
显示类似 \\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt
由于某种原因\\Nxxxx0
无法访问,并且我的用户配置文件是从备份系统加载的\\Nxxxxx1
。花费了一些时间才能弄清这一点,因为通常我的用户配置文件是由企业启动脚本绑定到一个驱动器号的,并且访问该驱动器号的操作仍然正常。我不确定为什么git-config使用网络共享而不是驱动器盘符(可能是我年轻了)
设置git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt
git status
后恢复到正常速度。
对我来说,问题是我在本地硬盘上克隆了许多不同的存储库,存储库越多,运行git status等命令所需的时间就越长。
我只是删除了很多本地不再需要的存储库,我的git状态从1分钟变为5秒。
我在这里看不到任何类似的答案。
git status
以任何方式影响您在一个目录中运行的标准。如果您的存储库检出到不同的目录,则一次只能运行git status
其中一个。如果您的git仓库重叠,则可能是另外一个故事,但这还是个坏主意。
另一个方面git status
将得到改进(在Git 2.14.x / 2.15,2017年第4季度),当它也显示忽略的文件时(git status --ignored
)
“
git status --ignored
”,当注意到没有任何跟踪路径的目录被忽略时,仍会枚举目录中所有被忽略的路径,这是不必要的。
已对代码路径进行了优化,以避免这种开销。
参见Jameson Miller()的commit 5aaa7fd(2017年9月18日)。(通过合并JUNIOÇ滨野- -在提交075bc9c,2017年9月29日)jamill
gitster
提高性能
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 |
如需更多改进(在2018年第二季度的Git 2.17中设置),请参见此答案。
node_modules
是完全随机的示例:此性能变化可能会对其产生影响。也许吧。
较旧版本的git具有git status的性能问题-有关更多信息,请参见提高git status性能的方法。
git 2.13有1个修复,另外还有2.17个。我从2.7移至2.23,它解决了慢速状态。计划在不久的将来完成2.24的另一项改进。
尝试从结帐的全新副本开始。
git clone myrepo mynewrepo
然后在mynewrepo中执行git status。
或者,如果您很勇敢,请清除现有结帐中的垃圾。
git clean -dfx
这样可以避免git扫描某些(可能很大)被忽略或未签入的文件。