windows使用 - windows git教程




Git/Bash在Windows 7 x64中速度非常慢 (14)

在开发一个小型项目期间,我一直在Windows和Ubuntu上使用Git,经常在两者之间来回翻转。 我遇到的问题是Git / Bash一直变慢。 当我说慢时,我的意思是运行cd需要8-25秒的时间,运行git命令需要5-20秒,而ls最多可能需要30秒。 不用说,这不好玩,更不用说没有生产力了。 我知道Git在Windows上比较慢,但这很荒谬。

对我而言,暂时工作的一种解决方案是禁用我的网络连接(如本答案中的建议),启动git,然后重新连接。 有时候这样做会持续很长时间,但最终性能总是会下降。 我已经通过msysgit讨论组,SO,msysgit问题列表等等几个星期来关闭,但我一直无法找到可行的解决方案。

到目前为止,我试过了:

  • 将git&project文件夹添加到病毒扫描程序的排除列表中
  • 完全禁用我的病毒扫描器(Kaspersky IS 2011)
  • 确保Outlook未运行(Outlook 2007)
  • 关闭所有其他应用程序
  • 以管理员身份运行git
  • 禁用网络连接,启动git并禁用连接
  • 禁用网络连接,启动git,重新启用连接(仅偶尔使用)
  • 运行git gc
  • 以上的组合

我确实读过一些人已经成功禁用bash完成,但理想情况下我想保持活跃。 msysgit的版本是1.7.3.1-preview20101002,操作系统是Windows 7 x64。 可以预见,在Linux上运行相同的东西闪电般快。 我会专门使用Linux,但我也需要在Windows中运行一些东西(某些应用程序,测试等)。

有没有人遇到类似的问题? 如果是这样,底层问题是什么,解决方案是什么(如果有的话)?

编辑:这超出了只是git仓库,但仅供参考,我一直使用git的回购已经很小:最多4-50个文件。



上述内容都无法帮助我。 在我的情况下,问题是这样表现出来的:

  • 任何命令都很慢(大约需要3秒钟才能执行)
  • 任何后续的ll命令都会立即执行, 但前提是在距前一个ls命令45秒之内

当用Process Monitor进行调试时,发现在每个命令之前都有一个DNS请求。

所以一旦我禁用了我的防火墙(Comodo就是我的情况)并且让命令执行这个问题就没有了。 当防火墙切换回来时,它不会返回。 有了最早的机会,我将更新此响应,并提供有关哪些进程正在执行阻止的DNS请求以及目标是什么的更多详细信息。

BR,G


在Chris Dolan的回答中,我使用了以下替代PS1设置。 只需将代码片段添加到〜/ .profile(在Win7上:c:/Users/USERNAME/.profile)即可。

fast_git_ps1 ()                                                                              
{                                                                                            
    printf -- "$(git branch 2>/dev/null | sed -ne '/^\* / s/^\* \(.*\)/ [\1] / p')"
}                                                                                            

PS1='\[\033]0;$MSYSTEM:\w\007                                                                
\033[32m\]\[email protected]\h \[\033[33m\w$(fast_git_ps1)\033[0m\]                                         
$ '                                                                                          

这保留了彩色外壳的好处,并显示当前分支名称(如果在git仓库中),但在我的机器上显着更快,从0.75秒到0.1秒。

基于这个博客


在我的情况下,git bash快捷方式被设置为Start in:%HOMEDRIVE%%HOMEPATH% (你可以通过右击git bash并选择属性来检查这个)。 这是网络驱动器。

解决方案是使其指向%HOME% 。 如果你没有它,你可以在环境变量中设置它,现在git bash应该闪电般快。


就我而言,它实际上是Avast杀毒软件,导致git bash甚至Powershell变得非常慢。

我第一次尝试禁用Avast 10分钟,看看它是否提高了速度,它确实。 之后,我添加了整个Git Bash安装目录作为Avast中的一个异常,用于读取,写入和执行。 在我的情况下是C:\Program Files\Git\*


您可以通过运行三个命令来设置一些配置选项,从而显着加快Windows上的git:

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

笔记:

  • core.preloadindex并行执行文件系统操作以隐藏延迟(更新:在git 2.1中默认启用)

  • core.fscache修复了UAC问题,因此您不需要以admin身份运行git(更新:在Git for Windows 2.8中默认启用)

  • gc.auto最大限度地减少.git /


我发现网络驱动器是性能问题。 HOME指向一个缓慢的网络共享。 我无法覆盖HOMEDRIVE但这不是我所见过的问题。

右击桌面上的计算机设置环境变量 - >属性 - >高级系统设置 - >环境变量添加到用户变量部分

HOME=%USERPROFILE%

我已经遇到了相同的问题,在Windows 7 x64上作为有限的用户帐户运行git for Windows(msysgit)很长一段时间。 从我在这里和其他地方阅读的内容来看,共同的主题似乎是缺乏管理权限和/或UAC。 由于UAC在我的系统上关闭,所以它试图在程序文件目录中写入/删除某些内容的解释对我来说是最有意义的。

无论如何,我已经通过安装带有zipinstaller的便携版git 1.8来解决我的问题。 请注意,我必须解压缩.7z分发文件并将其重新打包为压缩文件,以便zipinstaller工作。 我还必须手动将该目录添加到我的系统路径。

现在表现很好。 即使它安装在Program Files(x86)目录中,我没有作为有限用户的权限,但它似乎不会遭受同样的问题。 我认为这是因为便携式版本在写入/删除文件的位置更加保守,可能是这种情况,或者从1.7升级到1.8。 我不打算试图确定哪一个是理由,现在可以说它现在好多了,包括bash。


我真的很晚参加派对,我知道......

...但是:我的一个同事在windows上使用git时遇到了麻烦(7) git status checkoutadd很快,但git commit需要很长时间。

我们仍然试图找到这个问题的根本原因,但是将回购克隆到新文件夹中解决了他的问题。 以为我会在这里添加它,以防其他人遇到同样的问题,并且仍在寻找解决方案。


我知道这是旧的,但我在Git Bash和Git Gui都遇到同样的问题。 这两个程序都运行良好,但随后他们随机放慢爬行速度,我找不到原因。 事实证明,这是Avast。 Avast为各种程序(包括我编写的程序)造成了奇怪的事情,所以我将其禁用了一秒钟,果然,Bash现在的运行速度与Linux上一样快。 我只是将Git程序文件文件夹(C:\ Program Files \ Git)添加到Avast排除列表中,现在它的运行速度与Linux上的一样快。

是的,我意识到反病毒不是原帖中的问题,但我只是把它放在这里以防万一它对别人有用。


看来,完全卸载Git,重新启动(经典的Windows治疗),并重新安装Git是治愈。 我还清除了所有剩下的bash配置文件(它们是手动创建的)。 一切都很快。

如果由于某种原因重新安装不可能(或可取的),那么我肯定会尝试更改Chris Dolan的答案中引用的PS1变量; 它在某些操作中导致显着的加速。


综合答案:

  1. Wilbert's - 什么信息包括在PS1中
  2. sinelaw's - (<branch_name>)(<sha>)
# https://unix.stackexchange.com/questions/140610/using-variables-to-store-terminal-color-codes-for-ps1/140618#140618
# https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-ps1-prompt
# \033 is the same as \e
# 0;32 is the same as 32
CYAN="$(echo -e "\e[1;36m")"
GREEN="$(echo -e "\e[32m")"
YELLOW="$(echo -e "\e[33m")"
RESET="$(echo -e "\e[0m")"

# https://.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/19500237#19500237
# https://.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/13476961#13476961
# https://.com/questions/39518124/check-if-directory-is-git-repository-without-having-to-cd-into-it/39518382#39518382
fast_git_ps1 ()
{
    git -C . rev-parse 2>/dev/null && echo " ($((git symbolic-ref --short -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null))"
}

# you need \] at the end for colors
# Don't set \[ at the beginning or ctrl+up for history will work strangely
PS1='${GREEN}\[email protected]\h ${YELLOW}\w${CYAN}$(fast_git_ps1)${RESET}\] $ '

结果:


通过以“以管理员身份运行”启动cmd.exe,我解决了Win 7 x64上缓慢的git问题。


通过更改以下git配置,您可能会获得非常频繁的性能提升:

git config --global status.submoduleSummary false

在Window 7 x64上运行简单的git status命令时,我的电脑运行了超过30秒。 在这个选项被定义之后,命令是立即的。

激活Git自己的跟踪,如下面的页面所解释的,帮助我找到了问题的根源,这可能在您的安装中有所不同: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slowgithub.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow







mingw32