Git bash trace - 为什么这么慢?

时间:2017-07-11 14:39:50

标签: windows git bash

我在Windows 7上使用git bash非常慢。用户配置文件位于网络驱动器上,因此我将启动更改为c:驱动器上的启动。我还删除了PS1提示,我只使用了$

我也做过:

$ git config --global core.preloadindex true
$ git config --global core.fscache true

有些东西加速了,但是git命令本身非常慢。知道为什么吗?这是一个strace。

$ GIT_TRACE=1 git stash
09:27:27.099458 git.c:594               trace: exec: 'git-stash'
09:27:27.099458 run-command.c:369       trace: run_command: 'git-stash'
09:27:28.862258 git.c:594               trace: exec: 'git-sh-i18n--envsubst' '--variables' 'usage: $dashless $USAGE'
09:27:28.862258 run-command.c:369       trace: run_command: 'git-sh-i18n--envsubst' '--variables' 'usage: $dashless $USAGE'
09:27:29.096258 git.c:594               trace: exec: 'git-sh-i18n--envsubst' 'usage: $dashless $USAGE'
09:27:29.096258 run-command.c:369       trace: run_command: 'git-sh-i18n--envsubst' 'usage: $dashless $USAGE'
09:27:29.877258 git.c:369               trace: built-in: git 'rev-parse' '--git-dir'
09:27:30.267258 git.c:369               trace: built-in: git 'rev-parse' '--git-path' 'objects'
09:27:30.766458 git.c:369               trace: built-in: git 'rev-parse' '--show-toplevel'
09:27:30.984858 git.c:369               trace: built-in: git 'rev-parse' '--git-path' 'index'
09:27:31.281258 git.c:369               trace: built-in: git 'config' '--get-colorbool' 'color.interactive'
09:27:31.608858 git.c:369               trace: built-in: git 'config' '--get-color' 'color.interactive.help' 'red bold'
09:27:31.967658 git.c:369               trace: built-in: git 'config' '--get-color' '' 'reset'
09:27:32.375258 git.c:369               trace: built-in: git 'ls-files' '--error-unmatch' '--'
09:27:32.702858 git.c:369               trace: built-in: git 'update-index' '-q' '--refresh'
09:27:33.048058 git.c:369               trace: built-in: git 'diff-index' '--quiet' '--cached' 'HEAD' '--ignore-submodules' '--'
09:27:33.392258 git.c:369               trace: built-in: git 'diff-files' '--quiet' '--ignore-submodules' '--'
No local changes to save

在Cygwin上,实时只有3秒。这里是git bash,9秒。

$ time git stash
No local changes to save

real    0m9.172s
user    0m0.015s
sys     0m0.108s
$

这是Cygwins跟踪比较:

$  GIT_TRACE=1 git stash
13:02:51.567376 git.c:595               trace: exec: 'git-stash'
13:02:51.567376 run-command.c:369       trace: run_command: 'git-stash'
13:02:52.740271 git.c:595               trace: exec: 'git-sh-i18n--envsubst' '--variables' 'usage: $dashless $USAGE'
13:02:52.740271 run-command.c:369       trace: run_command: 'git-sh-i18n--envsubst' '--variables' 'usage: $dashless $USAGE'
13:02:52.990489 git.c:595               trace: exec: 'git-sh-i18n--envsubst' 'usage: $dashless $USAGE'
13:02:52.990489 run-command.c:369       trace: run_command: 'git-sh-i18n--envsubst' 'usage: $dashless $USAGE'
13:02:53.459647 git.c:371               trace: built-in: git 'rev-parse' '--git-dir'
13:02:53.694226 git.c:371               trace: built-in: git 'rev-parse' '--git-path' 'objects'
13:02:53.975720 git.c:371               trace: built-in: git 'rev-parse' '--show-toplevel'
13:02:54.085191 git.c:371               trace: built-in: git 'rev-parse' '--git-path' 'index'
13:02:54.194661 git.c:371               trace: built-in: git 'config' '--get-colorbool' 'color.interactive'
13:02:54.304131 git.c:371               trace: built-in: git 'config' '--get-color' 'color.interactive.help' 'red bold'
13:02:54.413601 git.c:371               trace: built-in: git 'config' '--get-color' '' 'reset'
13:02:54.523071 git.c:371               trace: built-in: git 'update-index' '-q' '--refresh'
13:02:54.775294 git.c:371               trace: built-in: git 'diff-index' '--quiet' '--cached' 'HEAD' '--ignore-submodules' '--'
13:02:54.900403 git.c:371               trace: built-in: git 'diff-files' '--quiet' '--ignore-submodules'
No local changes to save

1 个答案:

答案 0 :(得分:0)

首先,关于strace,您现在有了Git 2.27(2020年第二季度)的新选项

请参见commit 3efc128前的commit b6852e1(2020年4月9日)和Johannes Schindelin (dscho)(2020年4月8日)。
请参见commit a748f3fMatthias Aßhauer (rimrul)(2020年4月8日)。
(由Junio C Hamano -- gitster --commit b3eb70e中合并,2020年4月22日)

mingw:通过选择使用strace执行bash来帮助调试

签名人:Johannes Schindelin

MSYS2的strace工具对于调试非常有用...通过此补丁,如果设置了环境变量strace,则bash将通过GIT_STRACE_COMMANDS执行,这在调查问题时非常方便。测试套件。

还支持通过GIT_STRACE_COMMANDS将路径传递到日志文件,以强制Git使用strace.exe参数调用 -o <path> ,即登录文件而不是直接打印日志。

当输出可能被调用过程误解为Git输出的一部分时,这很方便。

注意:不是指定值的“ 1”,“ yes”或“ true”或“ set GIT_TRACE2_PERFORMANCE=1&& git <command>”,但是告诉Git让strace.exe直接登录到控制台。

第二,不要忘记trace2 utility的最新Git版本(2.22 +)

对于您而言,Ratings.timed <- read.delim("Ratings.timed.txt", fileEncoding="UTF-16LE")将有助于查看性能问题发生的位置