在一個小項目的開發過程當中,我一直在Windows和Ubuntu上使用Git,常常在二者之間來回翻轉。 問題是Git Bash一直變慢。 git
當我說慢時,個人意思是運行cd
須要8到25秒,運行git
命令須要5-20秒,而ls
有時須要30秒。 毋庸置疑,這並很差玩,更不用說非生產性了。 我知道Git在Windows上比較慢,但這太荒謬了。 github
對我來講暫時工做的一個解決方案是禁用個人網絡鏈接(如本答案所示 ),啓動Git Bash,而後從新鏈接。 有時它會在這樣作以後繼續快速運行數天,但性能老是最終會下降。 我已經在msysgit討論組,Stack Overflow,msysgit問題列表等中打開和關閉了幾個星期,但我尚未找到有效的解決方案。 網絡
到目前爲止,我已經嘗試過: 性能
git gc
我確實讀到有幾我的成功禁用Bash完成,但理想狀況下我想保持活躍。 msysgit的版本是1.7.3.1-preview20101002,操做系統是Windows 7 x64。 能夠預見,在Linux上運行相同的東西是快速的。 我會專門使用Linux,但我也須要在Windows中運行東西(某些應用程序,測試等)。 測試
有沒有人遇到相似的問題? 若是是這樣,那麼潛在的問題是什麼?解決方案是什麼(若是有的話)? google
這超出了Git存儲庫,但僅供參考,我一直使用Git的存儲庫很是小:最多4-50個文件。 lua
在對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
我在Windows 7 x64上運行Git for Windows(msysgit)做爲有限的用戶賬戶已經遇到了一樣的問題。
從我在這裏和其餘地方讀到的,共同的主題彷佛是缺少管理權限和/或UAC。 因爲UAC在個人系統上已關閉,所以它嘗試在程序文件目錄中編寫/刪除某些內容的解釋對我來講是最有意義的。
不管如何,我經過安裝帶有zipinstaller的便攜版Git 1.8解決了個人問題。 請注意,我必須解壓縮.7z分發文件並將其從新打包爲ZIP文件,以便zipinstaller工做。 我還必須手動將該目錄添加到個人系統路徑。
如今表現很好。 即便它安裝在Program Files (x86)
目錄中,我沒有做爲受限用戶的權限,它彷佛也沒有遇到一樣的問題。
我將此歸因於便攜式版本在寫入/刪除文件的位置(多是這種狀況)或從1.7升級到1.8的位置更爲保守。 我不打算肯定哪個是緣由,足以說它如今好多了,包括Bash。
經過將core.preloadindex設置爲true,我看到了一個不錯的改進。
正如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,但它應該適用於任何平臺)上測試的。
雖然您的問題多是基於網絡的,但我我的經過兩次修改加速了個人本地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/94和https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b查看Windows中速度問題正在進行的其餘工做。