當前位置:
首頁 > 知識 > Git 2.18版本發布:支持Git協議v2,提升性能

Git 2.18版本發布:支持Git協議v2,提升性能

在最新的官方 Git 客戶端正式版2.18中添加了對 Git wire 協議 v2 的支持,並引入了一些性能與 UI 改進的新特性。在 Git 的核心團隊成員 Brandon Williams 公開宣布這一消息前幾周,Git 協議 v2 剛剛合併至 Git 的 master 主幹分支。Git wire 協議定義了 Git 客戶端與服務端如何對於 clone、fetch 和 push 等操作進行通信。按 Williams 所說,新版本協議的目標是提升性能,並使其能夠更好的適應未來的改進。

新版本協議的主要驅動力是使 Git 服務端能夠對各種 ref(分支與 tag)進行過濾操作。

這就意味著,Git 伺服器無需將代碼庫中所有的 ref 一次性發送給客戶端,再由客戶端進行過濾。在大型的代碼庫中可能會存在不計其數的 ref,即使某些 ref 是客戶端無需使用的,也不得不載入多達數個 MB 的 ref 數據。在使用 v2 協議之後,Git 伺服器將根據客戶端所需的操作類型,對 ref 進行過濾之後再將列表發送至客戶端。

Williams 舉了一個例子,如果開發者所更新的分支僅比其遠程分支落後幾個提交,或是僅僅檢查本地分支是否已更新,則完全沒有必要在服務端傳遞整個 ref 列表,這對於時間和帶寬都是一種浪費。Williams 表示,基於 Google 內部對協議 v2的使用,在訪問例如 Chrome 這種包含了超過50萬個分支和 tag 的大型倉庫時,比起使用 v1 協議可達到三倍速以上。此外,通過使用新版本協議,更便於實現某些新的特性,例如按需選取 ref,以及拉取和推送 symref 等等。

支持協議 v2 的 Git 客戶端仍然可以與尚未支持 v2 的舊版本服務端進行通信。這要感謝當初在設計時決定通過一個獨立的通道發送 v2 所必須的額外信息。舊版本的服務端會直接忽略這個額外的通道,並返回 ref 的完整列表。

為了讓開發者能夠自行選擇協議的版本,Git 現在添加了一個新的 -c 命令行選項,如以下示例:

如果希望默認使用 v2 協議,可以修改 Git 的配置:

Git 2.18 中的另一個新特性是通過序列化的 commit graph 改善性能。簡單來說,就是新版本的 Git 可以將 commit graph 的結構保存在某個文件中,並附加一些額外的元數據,以加速圖形的載入。在進行獲取列表,對提交歷史進行過濾,以及計算合併的 base 等操作時,會表現得非常高效。

這項功能是由微軟的團隊所實現的,該團隊的成員 Derrick Stole 表示,對於大型代碼庫,例如 Linux kernel 或 Git 本身的代碼庫進行這類操作時,速度可提升 75–99%。Git 的 commit graph 仍然是一項處於實驗性階段的功能,因為某些 Git 特性無法很好地與 commit graph 相配合,例如淺克隆、對象替換,以及 commit graft 等等。如果不打算使用這些特性,可以通過運行 git config core.commitGraph true 命令啟用 commit graph。

讀者可在官方發布說明中了解 Git 2.18 的完整特性。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux資訊速推 的精彩文章:

讓Linux之花在你人生中綻放
入門MySQL資料庫導入與導出及重置root密碼

TAG:Linux資訊速推 |