發表文章

目前顯示的是 2022的文章

解決WSL在Windows檔案系統下速度緩慢的問題

圖片
背景 微軟在 比較 WSL 1 和 WSL 2 | Microsoft Docs 這篇文章有提到,WSL 2在存取windows檔案系統時速度會變慢。雖然 cd / ls 這類指令無法察覺,但一旦使用到git,大量的檔案存取立刻讓效能有感變慢。有些用戶甚至還沒開始使用git指令,只是進入git repository,就足以讓接下來的每個指令延遲一秒以上。 分析原因 使用git會變慢的理由應該不用多談了,那為何單單只是進入git repository,速度就會有感下滑呢?這是因為很多的shell theme(bash/zsh),為了美觀和實用,都有附加「進入git repository時,提示目前branch」的功能。 而這也導致了在git repository底下時,無論輸入任何指令,shell皆會在每個指令間使用git指令,間接拖垮執行速度。 解決方法 思路 其中一個方案是回去用WSL 1,這也是微軟的推薦方法。 第二種方案則是改為使用windows的git,本篇主要會介紹這個方法。 首先要知道,任何windows的工具皆可在WSL中直接呼叫(前提是工具有在環境變數當中)。以git為例,若在Windows安裝過git,只要在WSL中輸入 git.exe ,即可使用Windows的git。 $ which git.exe /mnt/c/Program Files/Git/cmd/git.exe 因此只要利用這個特性,在WSL進入Windows檔案系統時,將原先的linux git替換為windows git,就不會再感到延遲了。 oh-my-zsh的解決方案 這裡提供oh-my-zsh的解決方案。 對原始碼有興趣的可以看看oh-my-zsh針對git所做的擴展, 連結 。 oh-my-zsh主要使用 __git_prompt_git 此function來執行git操作。因此我們只要遮蔽此function,將git更改為windows版本,即可解決進入git repository時速度緩慢的問題。 當然,指令上的git也必須進行簡單替換,最後結果如下。 function __git_prompt_git ( ) { GIT_OPTIONAL_LOCKS = 0 command git.exe " $@ ...