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 命令列選項,如以下示例:
\\\git -c protocol.version=2 ls-remote\
\\如果希望預設使用 v2 協議,可以修改 Git 的配置:
\\\git config --global protocol.version=2\
\\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 的完整特性。
\\相關文章
- Git傳輸協議的對比分析Git協議
- Git最佳實踐建議Git
- Git遠端協作和分支Git
- 工程協作工具(一)gitGit
- Git應用詳解第六講:Git協作與Git pull常見問題Git
- 『現學現忘』Git基礎 — 5、Git的協作模式Git模式
- Git 團隊協同開發Git
- Git bug分支與多人協作Git
- Uniswap V2 — 從程式碼解釋 DeFi 協議協議
- 教你學會Git——團隊協作Git
- [Git] Git整理(四) git rebase 的使用Git
- Git:Git常用操作Git
- 優化gateway支援wss協議優化Gateway協議
- ActiveMQ支援的訊息協議MQ協議
- nginx配置支援websocket協議wssNginxWeb協議
- git reset 和 git revertGit
- git rebase 和 git mergeGit
- git revert與git resetGit
- 【git教程】快速掌握gitGit
- git 入門教程之協同開發Git
- 6、Git之團隊協作機制Git
- [Note] git清空.git目錄後,重新再git init & git remote的討論GitREM
- git提交時支援檔名大小寫的修改Git
- git學習之git reflog和git cherry-pickGit
- git學習之git rebaseGit
- git操作之二:git restoreGitREST
- git操作之三:git resetGit
- [git] git問題處理Git
- git bash and git 初體驗Git
- 多人協同開發,git workflow 提高團隊協作能力Git
- Dubbo 支援哪些序列化協議?協議
- PowerMock: 支援GRPC協議的 Mock ServerMockRPC協議Server
- Git多人協作開發流程分支管理方案Git
- GitGit
- JB的git之旅-git命令列Git命令列
- git log與git reflog區別Git
- Git log 和 Git reflog 區別Git
- Git reset 和 Git revert 實踐Git