微軟開源Scalar 提升操作巨型Git 倉庫的速度
Git 屬於分佈式版本控制系統,默認情況下,每個Git 倉庫都具有整個歷史記錄的完整文件副本。即便是中等規模的開發團隊也會產生數千個提交,每個月向倉庫添加幾百兆的數據。而隨著倉庫的佔用空間增加,Git 難以管理所有數據,導致其運行越來越不順暢。
如此一來,開發者的時間就會被浪費在執行命令後等待反饋的操作上,如使用git status
獲取被修改的文件,或者使用git fetch
將代碼拉取至本地。由於等待的時間過長,開發者大多會傾向於切換至完成另外的任務,待命令執行完成後再切換回來。而這種來回切換任務的工作方式常常會降低開發者的生產力。
對於處理巨型Git倉庫的問題,微軟顯然是頗有經驗。畢竟Windows操作系統的代碼就是使用Git進行管理,為了克服上述的問題,微軟開發了VFS for Git(以前稱為GVFS),此項目使用虛擬文件系統繞過了許多倉庫大小的限制,所以Windows開發者在如此龐大的項目前也能正常使用Git。
在開發Vit for Git的同時,微軟通過使用自定義跟踪系統和收集用戶反饋來確定性能瓶頸。在此期間,微軟也為Git客戶端貢獻了一些代碼,包括提交樹(Commit-Graph)功能以及對git push
和稀疏檢出的改進。基於這些貢獻以及其他許多對Git的近期改進,微軟啟動了一個項目——無需虛擬文件系統即可支持巨型Git倉庫。這就是Scalar的誕生背景。
Scalar是一個使用C#編寫的.NET Core應用程序,僅支持在Windows和macOS平台中運行。Scalar通過設置所建議的配置值和運行後台維護來最大程度優化Git命令的性能。無論開發者使用什麼服務來託管代碼倉庫,Scalar都能有效地加速Git指令。微軟提到,只要使用Scalar為體積最大的代碼倉庫進行註冊,就能馬上感受到Git執行速度大的幅提升。
對於Scalar 的未來,微軟希望將其貢獻給Git。微軟計劃把Scalar 中加速Git 的方法直接合併到Git 項目中,最終實現讓開發者不需要Scalar,僅使用Git 客戶端就能獲得這些性能改進。不過要達成這個目標,仍然有很長的路要走。微軟提到,目前稀疏檢出是Scalar 用來解決倉庫規模擴大的方法,儘管Git 最近更新了稀疏檢出功能,使得該功能更容易使用,但是要達到提供完整功能的階段,還有一段距離。
Scalar目前使用稀疏檢出而非虛擬文件系統,因此在執行Git命令時會存在瓶頸,特別是git checkout
的速度不及VFS for Git,微軟正在研究並行版本的git checkout
,以提高執行性能。微軟提到,為了真正地擴展Git服務以滿足成千上萬的工程師的需求,並構建與中央服務器交互的機器,Git需要提供類似於GVFS緩存服務器的概念。他們也表示計劃很快在郵件列表中提出這個想法。
另外,目前Git客戶端倉庫之所以能順暢地執行,是依賴定期執行的前台垃圾回收器,但微軟提到,對於巨型倉庫來說,這是不可行的方法。因此微軟計劃在Git客戶端中加入某種形式的後台維護功能,類似git maintenance start
命令,並像scalar register
一樣容易使用。
詳細的使用說明請查看 https://devblogs.microsoft.com/devops/introducing-scalar