<menuitem id="prpd9"><i id="prpd9"><menuitem id="prpd9"></menuitem></i></menuitem>
<th id="prpd9"></th>
<th id="prpd9"><noframes id="prpd9"><span id="prpd9"></span>
<span id="prpd9"><noframes id="prpd9">
<th id="prpd9"></th>
<span id="prpd9"><noframes id="prpd9"><th id="prpd9"></th>
<th id="prpd9"><noframes id="prpd9">
<span id="prpd9"><noframes id="prpd9">
<strike id="prpd9"><video id="prpd9"></video></strike>
掃描關注網站建設微信公眾賬號

掃一掃微信二維碼

微軟開源 Scalar,提升操作巨型 Git 倉庫的速度

Time:2020-02-16 08:29:31

Git 屬于分布式版本控制系統,默認情況下,每個 Git 倉庫都具有整個歷史記錄的完整文件副本。即便是中等規模的開發團隊也會產生數千個提交,每個月向倉庫添加幾百兆的數據。而隨著倉庫的占用空間增加,Git 難以管理所有數據,導致其運行越來越不順暢。如此一來,開發者的時間就會被浪費在執行命令后等待反饋的操作上,如使用git status獲取被修改的文件,或者使用git fetch將代碼拉取至本地。由于等待的時間過長,開發者大多會傾向于切換至完成另外的任務,待命令執行完成后再切換回來。而這種來回切換任務的工作方式常常會降低開發者的生產力。

對于處理巨型 Git 倉庫的問題,微軟顯然是頗有經驗。畢竟 Windows 操作系統的代碼就是使用 Git 進行管理,為了克服上述的問題,微軟開發了 VFS for Git(以前稱為 GVFS),此項目使用虛擬文件系統繞過了許多倉庫大小的限制,所以 Windows 開發者在如此龐大的項目前也能正常使用 Git。

114355_qm1b_2720166.jpg

在開發 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

国产村长足疗店按摩
<menuitem id="prpd9"><i id="prpd9"><menuitem id="prpd9"></menuitem></i></menuitem>
<th id="prpd9"></th>
<th id="prpd9"><noframes id="prpd9"><span id="prpd9"></span>
<span id="prpd9"><noframes id="prpd9">
<th id="prpd9"></th>
<span id="prpd9"><noframes id="prpd9"><th id="prpd9"></th>
<th id="prpd9"><noframes id="prpd9">
<span id="prpd9"><noframes id="prpd9">
<strike id="prpd9"><video id="prpd9"></video></strike>