在一个小项目的开发过程中,我一直在Windows和Ubuntu上使用Git,经常在两者之间来回切换。问题是Git Bash总是变慢。

当我说慢的时候,我的意思是运行cd需要8-25秒,运行git命令需要5-20秒,而ls有时需要30秒。不用说,这一点都不好玩,更不用说没有成效了。我知道Git在Windows上比较慢,但这太荒谬了。

对我来说,暂时有效的解决方案是禁用我的网络连接(在这个回答中建议),启动Git Bash,然后重新连接。有时在这样做之后,它会持续快速运行几天,但性能最终总是会下降。我已经在msysgit讨论组,Stack Overflow, msysgit问题列表等上拖了几周,但我还没有能够找到工作的解决方案。

到目前为止,我尝试过:

将Git和项目文件夹添加到病毒扫描程序的排除列表 完全禁用我的病毒扫描程序(卡巴斯基IS 2011) 确保Outlook未运行(Outlook 2007) 关闭所有其他应用程序 以管理员身份运行Git Bash 禁用网络连接,启动Git Bash,并保持禁用连接 禁用网络连接,启动Git Bash,重新启用连接(仅偶尔有效) 运行git gc 以及以上的组合

我确实读到一些人成功地禁用了Bash完成,但理想情况下,我希望保持它的活动状态。msysgit版本为1.7.3.1-preview20101002,操作系统为Windows 7 x64。可以预见的是,在Linux上运行同样的东西会像闪电一样快。我只会使用Linux,但我也需要在Windows上运行一些东西(某些应用程序,测试等)。

有人遇到过类似的问题吗?如果有,潜在的问题是什么,解决方案是什么(如果有的话)?

这不仅仅是Git存储库,只是作为参考,我一直在使用Git的存储库非常小:最多4-50个文件。


当前回答

你可以通过运行三个命令来设置一些配置选项来显著提高Windows上的Git速度:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

注:

核心。preloadindex并行执行文件系统操作以隐藏延迟(更新:在Git 2.1中默认启用) 核心。fscache修复了UAC问题,所以你不需要以管理员身份运行Git(更新:在Git for Windows 2.8中默认启用) gc。Auto最小化.git/中的文件数量

其他回答

Bash提示符中是否显示Git信息?如果是这样,也许您无意中在每个命令上都做了太多的工作。为了验证这一理论,请尝试在Bash中进行以下临时更改:

export PS1='$'

在我的例子中,Git Bash快捷方式被设置为开始:%HOMEDRIVE%%HOMEPATH%(您可以通过右键单击Git Bash并选择属性来检查)。这是网络驱动器。

解决方案是让它指向%HOME%。如果您没有,您可以在环境变量中设置它,现在Git Bash应该是闪电般的快。

似乎完全卸载Git,重新启动(经典的Windows解决方案),然后重新安装Git是解决方案。我还清除了所有剩下的bash配置文件(它们是手动创建的)。一切又快起来了。

如果出于某种原因,重新安装是不可能的(或不可取的),那么我肯定会尝试改变Chris Dolan回答中提到的PS1变量;它导致了某些操作的显著加速。

我也有git PS1速度慢的问题,尽管很长一段时间我都在想这是数据库大小的问题(大仓库),并尝试了各种git gc技巧,并寻找其他原因,就像你一样。然而,就我而言,问题在于这句话:

function ps1_gitify
{
   status=$(git status 2>/dev/null )      # <--------------------
   if [[ $status =~ "fatal: Not a git repository" ]]
   then
       echo ""
   else
       echo "$(ps1_git_branch_name)  $(ps1_git_get_sha)"
  fi
}

为每个命令行状态行执行git状态是很慢的。哎哟。那是我手写的东西。我发现这是个问题,当我尝试

export PS1='$'

就像这里提到的一个答案。命令行速度极快。

现在我用这个:

function we_are_in_git_work_tree
{
    git rev-parse --is-inside-work-tree &> /dev/null
}

function ps1_gitify
{
    if ! we_are_in_git_work_tree
    then
    ...

从Stack Overflow post PS1行与git当前分支和颜色,它工作良好。再次使用快速的Git命令行。

我也有过类似的情况,我的问题与活动目录有关,坐在vpn后面。

这样工作了半年,找到了这个金子:http://bjg.io/guide/cygwin-ad/

你所需要做的就是在/etc/nsswitch.conf(你可以在你的git目录中找到它)中从passwd和group部分禁用db,这样文件看起来就像:

# Begin /etc/nsswitch.conf
passwd: files
group: files
db_enum: cache builtin
db_home: cygwin desc
db_shell: cygwin desc
db_gecos: cygwin desc
# End /etc/nsswitch.conf

然后更新您的本地密码和组设置一次:

$ mkpasswd -l -c > /etc/passwd
$ mkgroup -l -c > /etc/group