写点什么

Git 2.18 版本已支持 Git 协议 v2

  • 2018-07-06
  • 本文字数:1202 字

    阅读完需:约 4 分钟

在最新的官方 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 命令行选项,如以下示例:

复制代码
<pre data-anchor-id="67oe">

git -c protocol.version=2 ls-remote

复制代码

如果希望默认使用 v2 协议,可以修改 Git 的配置:

复制代码
<pre data-anchor-id="xad9">

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 2.18 Adds Support for Git Protocol Version 2

2018-07-06 10:482571
用户头像

发布了 428 篇内容, 共 200.7 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

什么是低代码开发?低代码开发可以解决哪些问题?

优秀

低代码开发 低代码开发平台

MegEngine 使用小技巧:用 mperf 进行安卓 opencl 算子的 roofline 分析

MegEngineBot

深度学习 开源 MegEngine roofline

软件测试 | unittest单元测试框架

测吧(北京)科技有限公司

测试

大数据如何助力营销(3)产品定位

MobTech袤博科技

软件测试 | 编写单元测试用例

测吧(北京)科技有限公司

测试

互联网用户之间如何传输大文件

镭速

镭速传输:安全文件传输的意义

镭速

INFINI Labs 产品更新 | 重磅推出 Easysearch 一个分布式的近实时搜索与分析引擎

极限实验室

elasticsearch console Gateway agent easysearch

APP和小程序共同塑造现代化政务服务

FinFish

小程序 小程序容器 小程序化 小程序技术 政务服务

使用 Easysearch,日志存储少一半

极限实验室

elasticsearch zstd easysearch

火热报名!2023开放原子全球开源峰会报名通道正式开启

开放原子开源基金会

AI数据采集标注类型:揭秘数据采集与标注的关键环节

数据堂

软件测试 | Django客户端测试

测吧(北京)科技有限公司

测试

API Mock 教程, 简单易懂。

Apifox

前端 开发工具 API Mock Mock 服务

IPP SWAP算力LP挖矿系统搭建开发技术

薇電13242772558

智能合约

玩转 LLMs 之基础设施「利刃出鞘」

Zilliz

Milvus ChatGPT autogpt zillizcloud langchain

AI女友同时和1000人谈恋爱,狂赚500万

引迈信息

人工智能 AI 低代码 JNPF

PAG动效框架源码笔记 (二)层级视图

olinone

ios 动效 andiod 特效

直播预告 | 博睿学院:智能告警与AIOps融合探索

博睿数据

根因分析 智能运维 智能告警 博睿数据 博睿学院

2023年5月中国数据库排行榜:OTO组合回归育新机,华为高斯蓄势待发展雄心

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

基于WebGL智慧储能电站三维管理平台

2D3D前端可视化开发

物联网 数字孪生 智慧储能电站 微电网

数据标注类相关文章:揭秘数据标注的奥秘

数据堂

浪潮海岳低代码平台inBuilder开源社区版特性推荐系列-第二期

inBuilder低代码平台

开源 低代码

人工智能基础软件助力交通运输智慧执法

九章云极DataCanvas

开源赋能 普惠未来|京东集团寄语2023开放原子全球开源峰会

开放原子开源基金会

AREX Agent 源码解读之全链路跟踪和 Mock 数据读写

AREX 中文社区

Java 测试

如何从命令行启动 CST 软件?

思茂信息

FCPX插件-手势点击滑动视频转场 Hand Gesture Transitions

真大的脸盆

Mac Mac 软件 fcpx插件 视频特效插件 转场效果插件

Git 2.18版本已支持Git协议v2_Git_Sergio De Simone_InfoQ精选文章