HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:482053
用户头像

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

关注

评论

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

全网更简单的方法,教你一键接入微信公众号,包教包会。包你成功。三包

派大星

ChatGPT

去哪儿网异常统计分析实践——Heimdall

Qunar技术沙龙

去哪儿网 Heimdall

业务出海,华为云全球加速服务GA助一臂之力

轶天下事

案例实践|云智慧ITSM产品在利星行汽车的运维实践

云智慧AIOps社区

运维 ITSM ITSM软件 ITSM解决方案 IT 运维

selenium源码通读·13 |webdriver/support分析

Python 源码 测试 自动化测试 selenium

AI与全民开发:挑战和机会并存

草料二维码

AI 无代码 全民开发

Wallys AP controllers devices/IPQ4019 and IPQ4029 chipsets provide centralized management.

Cindy-wallys

IPQ4019 ipq4029

太强了!京东首席架构师深邃洞察:服务化+云原生+微服务

做梦都在改BUG

Java 架构 微服务 云原生

盘“底座”,盘出新生意经

用友BIP

【web 开发】生活中大家都喜欢搞模板来规范化操作,抽象类却玩不明白-PHP的抽象类(63)

迷彩

模板 抽象类 三周年连更 抽象方法

图解制品仓库CodeArts Artifact

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

selenium源码通读·11 |webdriver/common/touch_actions.py-TouchActions类分析

Python 源码 测试 自动化测试 selenium

看火山引擎DataLeap如何做好电商治理(一):挑战与痛点

字节跳动数据平台

监控 模型 电商 数据平台 DataLeap

「微服务」这10道Consul面试题值得一看

王中阳Go

golang 微服务 面试题 服务发现 服务注册

横空出世!复盘B站面试坑我最深的Java并发:JDK源码剖析

做梦都在改BUG

Java 源码 jdk 高并发

从源码全面解析Java 线程池的来龙去脉

做梦都在改BUG

Java 源码 线程池

Unity 发布《金融科技类APP用户调研报告》,应用内广告和搜索广告成为获客突破口

Geek_2d6073

企业办公转型的出路在哪里?华为云桌面开创办公新形式

轶天下事

神奇,声网Web SDK还能这么实现直播中美颜功能

声网

前端 Web RTC 美颜

【云管平台】2023年云管平台厂商排行榜

行云管家

云计算 企业上云 云管平台 行云管家

kafka高性能设计之内存池

做梦都在改BUG

Java kafka 系统设计 高性能 内存池

虚拟模块在前端开发中的应用与示例

Lee Chen

JavaScript 前端

联合索引该如何选择合适的列?

江南一点雨

MySQL

ChatGPT会如何影响我们,会让我们失业吗?兼与吴军博士商榷 | 社区征文

李韧

人工智能 ChatGPT 三周年征文

selenium源码通读·12 |webdriver/remote分析

Python 源码 测试 自动化测试 selenium

05.01~05.07 NFT 生态热点汇总

NFT Research

NFT NFT\ #Web3

数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年4月刊

墨天轮

MySQL 数据库 oracle postgresql 国产数据库

华为云大数据治理轻量级解决方案为中长尾企业赋能

轶天下事

阿里P9耗时28天,总结历年亿级活动高并发系统设计手册

做梦都在改BUG

Java 架构 系统设计 高并发

Hive SQL on Flink 构建流批一体引擎

Apache Flink

大数据 flink 实时计算

流行的DJ音乐混音软件:X Djing - Music Mix Maker for Mac

真大的脸盆

Mac Mac 软件 音乐混音软件

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