Git 协议 v2 正式推出带来不可预计的效果, 谷歌已经在内部使用


新的 Git 线协议为 reference 提供服务端过滤、让扩展新特性变得更容易以及简化 HTTP 传输的客户端处理。

谷歌已经在内部使用新版本的 Git 协议来提升速度。Brandon Williams 解释道:“对于包含 500k references 的仓库中的单个分支的无操作读取,性能提升了 3 倍。新版本协议还使得从 googlesource.com 服务器发送出来的开销字节数减少到原先的八分之一。这种改进主要是由于只返回客户端需要的 reference。”

Git protocol-v2 的开发成果在不到两周前合并到了 Git 2.18 的 mainline 上。凭借着显著的优势,谷歌已经在 Google Source 和 Cloud Source 仓库的 Git 服务器上支持这项新协议。

简化 HTTP 传输的客户端处理

开发新协议的主要动机是能够为引用(分支和标记)提供服务器端过滤。在协议 v2 之前,服务器以初始引用通告来响应所有拉取命令,列出代码仓库中的所有引用。即使客户端只关心更新单个分支,比如`git fetch origin master`,也会发送这整个列表。

针对含有数十万引用(Chromium 代码仓库就有超过 50 万个分支和标记)的仓库,服务器可能最终发送数十 MB 的数据,但这些数据却被忽略。这在拉取期间通常占用大量的时间和带宽,尤其是当你远程更新只有几个提交的分支时,或者甚至当你只检查是否最新,因而导致无操作拉取时。

而 Git 协议 v2 在含有 50 万个引用的仓库上对单个分支执行无操作拉取的性能提高了3倍。协议 v2 还使从 googlesource.com 服务器发送的开销字节(non-packfile)减少了 8 倍。这种改进主要归功于将服务器通告的引用过滤成客户端表示感兴趣的引用。

相关内容