使用git 2.8.0,我在.gitconfig
中定义了一个别名:
[alias]
st = status
我可以确认使用git config --list --show-origin
我只有一个全局配置文件和一个本地配置文件,别名只是全局定义。
然后,如果我运行GIT_TRACE=1 git st
,则需要7秒钟:
17:18:48.934703 git.c:564 trace: exec: 'git-st'
17:18:48.936703 run-command.c:336 trace: run_command: 'git-st'
17:18:55.734092 git.c:287 trace: alias expansion: st => 'status'
17:18:55.735092 git.c:564 trace: exec: 'git-status'
17:18:55.735092 run-command.c:336 trace: run_command: 'git-status'
17:18:55.772094 git.c:351 trace: built-in: git 'status'
GIT_TRACE=1 git status
它是瞬间的:
17:19:23.649688 git.c:351 trace: built-in: git 'status'
这种情况发生在Windows机器上。知道底层问题是什么?
答案 0 :(得分:1)
这种情况发生在Windows机器上。知道底层问题是什么?
由于git命令基于linux代码,因此它们针对基于unix的操作系统进行了优化
当您在Windows上运行它时(特别是在GIT_TRACE
打开的情况下)git必须挂钩并监听Windows系统调用并为这些系统调用和事件设置详细和调试模式。
这就是它在Windows上的速度慢的原因。
Github取得了git windows客户端的所有权,从版本2开始,他们不断改进它。
阅读本文(2.8的发行说明):
Convergence with Git for Windows
最近有一个很大的推动力,让Git 在Windows上感觉舒适,就像在Linux和OS X上一样。
例如,在Windows上启动进程相对昂贵,因此许多最初编写为脚本的Git命令已经在C中重写以使它们变得更加快捷。