Git别名比原始命令慢

时间:2016-04-28 21:23:26

标签: git

使用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机器上。知道底层问题是什么?

1 个答案:

答案 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中重写以使它们变得更加快捷