git - Git索引和提交很慢
问题描述
我有一个本地 git 存储库并用于git add file1 file2 file3...
将我的修改添加到 git 索引。之后我使用普通的git commit
. 每个命令大约需要 3 到 6 秒。我的存储库有大约 150.000 次提交。
我已经执行了git gc
,因为我认为它会执行一些垃圾收集。SSD 相当快。我想知道我可以在 git 中打开哪些螺丝来加速这两个命令的执行。有什么建议吗?
git version 2.21.0 (Apple Git-122.2)
我的系统是带有 MacOS 的 Mac Pro 10.14.6
。我使用带有APFS
. 未安装防病毒软件(或任何其他干扰扫描软件)。
解决方案
首先,更新到最新的 Git 2.25:每个新版本都解决了性能问题。
要调查性能问题,请将GIT_TRACE2_PERF
环境变量设置为1
并运行git
命令。有关该功能以及如何解释输出表的详细信息,请参阅此 SO 答案trace2
。
(在 Bash 中,您可以设置变量并在同一行中运行命令)
GIT_TRACE2_PERF=1 git commit -m "test"
在 Windows 命令提示符中,您需要使用SET
:
SET GIT_TRACE2_PERF=1
git commit -m "test"
或者,在一行中的 CMD 中:
cmd /V /C "SET "GIT_TRACE2_PERF=1" && git commit -m "test""
例如,在 Windows 上,您将看到如下所示的输出:
C:\git\me\foobar>SET GIT_TRACE2_PERF=1
C:\git\me\foobar>git status
17:23:13.056175 common-main.c:48 | d0 | main | version | | | | | 2.31.1.windows.1
17:23:13.056175 common-main.c:49 | d0 | main | start | | 0.003356 | | | git.exe status
17:23:13.065174 ..._win32_process_info.c:118 | d0 | main | data_json | r0 | 0.012053 | 0.012053 | process | windows/ancestry:["git.exe","cmd.exe","explorer.exe"]
17:23:13.066174 repository.c:130 | d0 | main | def_repo | r1 | | | | worktree:C:/git/me/foobar
17:23:13.067174 git.c:448 | d0 | main | cmd_name | | | | | status (status)
17:23:13.068174 read-cache.c:2324 | d0 | main | region_enter | r1 | 0.015462 | | index | label:do_read_index .git/index
17:23:13.069175 cache-tree.c:598 | d0 | main | region_enter | r1 | 0.015809 | | cache_tree | ..label:read
17:23:13.069175 cache-tree.c:600 | d0 | main | region_leave | r1 | 0.016021 | 0.000212 | cache_tree | ..label:read
17:23:13.069175 read-cache.c:2284 | d0 | main | data | r1 | 0.016056 | 0.000594 | index | ..read/version:2
17:23:13.069175 read-cache.c:2286 | d0 | main | data | r1 | 0.016065 | 0.000603 | index | ..read/cache_nr:3808
17:23:13.069175 read-cache.c:2329 | d0 | main | region_leave | r1 | 0.016072 | 0.000610 | index | label:do_read_index .git/index
注意最左边一列的挂钟时间,第 7 列自开始以来的总时间,以及第 8 列中每个子操作的总时间。
推荐阅读
- python - Fortran 从 Python 中读取单元
- html - 仅在触摸设备上使用 CSS 按下时将样式应用于按钮?
- c++ - 按钮没有给出正确的输出
- hive - presto hive 元存储连接
- aws-cdk - 创建 ecs.LoadBalancedFargateService 时如何指定子网
- c++ - “”中没有名为“”的类型
- html - 是否可以在同一个 div 中有不同的 z-index?
- sql - 从一个表计数并从另一表匹配计数
- ibm-watson - Watson API (python-sdk) 使用 V2 实体系统进行英文 NLU
- spring-boot - 如何在 Spring Boot 控制器中获取原始 POST 数据