在Windows 7 x64上,Git Bash很是慢

在一個小項目的開發過程當中,我一直在Windows和Ubuntu上使用Git,常常在二者之間來回翻轉。 問題是Git Bash一直變慢。 git

當我說慢時,個人意思是運行cd須要8到25秒,運行git命令須要5-20秒,而ls有時須要30秒。 毋庸置疑,這並很差玩,更不用說非生產性了。 我知道Git在Windows上比較慢,但這太荒謬了。 github

對我來講暫時工做的一個解決方案是禁用個人網絡鏈接(如本答案所示 ),啓動Git Bash,而後從新鏈接。 有時它會在這樣作以後繼續快速運行數天,但性能老是最終會下降。 我已經在msysgit討論組,Stack Overflow,msysgit問題列表等中打開和關閉了幾個星期,但我尚未找到有效的解決方案。 網絡

到目前爲止,我已經嘗試過: 性能

  • 將Git和項目文件夾添加到病毒掃描程序的排除列表中
  • 徹底禁用個人病毒掃描程序(Kaspersky 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中運行東西(某些應用程序,測試等)。 測試

有沒有人遇到相似的問題? 若是是這樣,那麼潛在的問題是什麼?解決方案是什麼(若是有的話)? google

這超出了Git存儲庫,但僅供參考,我一直使用Git的存儲庫很是小:最多4-50個文件。 lua


#1樓

在對Chris Dolan的回答的擴展中,我使用瞭如下替代PS1設置。 只需將代碼片斷添加到〜/ .profile(在Windows 7上:C:/Users/USERNAME/.profile)。 spa

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

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

這保留了彩色外殼的優勢並顯示當前分支名稱(若是在Git存儲庫中),但它在個人機器上顯着更快,從~0.75秒到0.1秒。 操作系統

這是基於這篇博客文章code


#2樓

我在Windows 7 x64上運行Git for Windows(msysgit)做爲有限的用戶賬戶已經遇到了一樣的問題。

從我在這裏和其餘地方讀到的,共同的主題彷佛是缺少管理權限和/或UAC。 因爲UAC在個人系統上已關閉,所以它嘗試在程序文件目錄中編寫/刪除某些內容的解釋對我來講是最有意義的。

不管如何,我經過安裝帶有zipinstaller的便攜版Git 1.8解決了個人問題。 請注意,我必須解壓縮.7z分發文件並將其從新打包爲ZIP文件,以便zipinstaller工做。 我還必須手動將該目錄添加到個人系統路徑。

如今表現很好。 即便它安裝在Program Files (x86)目錄中,我沒有做爲受限用戶的權限,它彷佛也沒有遇到一樣的問題。

我將此歸因於便攜式版本在寫入/刪除文件的位置(多是這種狀況)或從1.7升級到1.8的位置更爲保守。 我不打算肯定哪個是緣由,足以說它如今好多了,包括Bash。


#3樓

經過將core.preloadindex設置爲true,我看到了一個不錯的改進。


#4樓

正如Chris Dolan和Wilbert的回答所指出的那樣, PS1會減慢你的速度

而不是徹底禁用(如Dolan建議)或使用Wilbert提供的腳本,我使用更快的「啞PS1」。

它使用(git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null

PS1='\033[33m\]\w \n\[\033[32m\]$((git symbolic-ref -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null) \[\033[00m\]# '

在個人Cygwin上,這比Wilbert的「fast_Git_PS1」答案更快 - 200毫秒與400毫秒,所以它能夠減小你的一些快速遲緩。

它沒有__git_ps1那麼複雜 - 例如,當你進入.git目錄等時它不會改變提示,可是對於正常的平常使用來講它足夠好並且速度快。

這是在Git 1.7.9(Cygwin,但它應該適用於任何平臺)上測試的。


#5樓

雖然您的問題多是基於網絡的,但我我的經過兩次修改加速了個人本地git status調用十倍(7秒以上到700毫秒)。 這是一個700 MB的存儲庫,包含21,000個文件和大量的大型二進制文件。

一個是啓用並行索引預加載。 從命令提示符:

git config core.preloadindex true
這將time git status從7秒更改成2.5秒。

更新!

如下再也不須要。 從mysysgit 1.9.4開始修補此修補程序
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
可是,您必須經過鍵入啓用該修復程序
git config core.fscache true

我還禁用了UAC和「luafv」驅動程序(須要重啓)。 這會禁用Windows Vista,7和8中的驅動程序,該驅動程序會重定向嘗試寫入系統位置的程序,而是將這些訪問重定向到用戶目錄。

要查看有關這會如何影響Git效果的討論,請閱讀: https//code.google.com/p/msysgit/issues/detail?id = 320

要禁用此驅動程序,請在regedit中將HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv的「start」鍵HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv爲4以禁用驅動程序。 而後,將UAC置於其最低設置「永不通知」。

若是禁用此驅動程序會讓您保持警戒(應該),則在與系統分區不一樣的驅動器(或分區)上運行替代方案。 顯然,驅動程序僅在系統分區上的文件訪問上運行。 我有一個第二個硬盤驅動器,並在個人C驅動器上運行此註冊表修改時看到相同的結果,由於我在D驅動器上沒有它。

此更改須要將time git status從2.5秒下降到0.7秒。

您還能夠關注https://github.com/msysgit/git/pull/94https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b查看Windows中速度問題正在進行的其餘工做。

相關文章
相關標籤/搜索