写点什么

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

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

关注

评论

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

再次飙升GitHub榜首!这份“保姆级”的SpringBoot笔记,不服不行

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

前端已死?我看未必,但「低代码」已剑指前端程序员

引迈信息

面试 Vue 前端 低代码

OpenCloudOS 如何以最小成本,高效定位内存泄露路径?

OpenCloudOS

Linux 内存 opencloudOS

Spring中Autowired注解到底怎么实现的

做梦都在改BUG

Java spring 框架

2022 IoTDB Summit:Dr.Feinauer《Apache IoTDB 在德国汽车生产线多级数据同步中的应用实践》

Apache IoTDB

数据库·

玩好 StarRocks,大厂 offer 接不完!|字节跳动、小红书、京东物流、唯品会、腾讯音乐要的就是你!

StarRocks

数据库

一文吃透 Go 内置 RPC 原理

捉虫大师

Go RPC

探究计算机视觉新兴能力:如何通过提示检索提高性能?

Zilliz

计算机视觉

一文读懂PaddleSpeech中英混合语音识别技术

飞桨PaddlePaddle

语音识别 百度飞桨

鲁班软件使用明道云优化项目管理的全过程

明道云

GitLab 专家分享|关于 DevSecOps ,你需要知道这几点

极狐GitLab

DevOps DevSecOps 极狐GitLab 研发运维 安全左移

跨境数据传输是日常业务中经常且至关重要的组成部分

镭速

2022 IoTDB Summit:中国工程院院士倪光南《发展开源教育,汇天下英才激活中国创新动能》

Apache IoTDB

数据库· ;开源

从智能进化模型看用友BIP的AI平台化能力

YonBuilder低代码开发平台

阿里云云原生每月动态 | 聚焦实战,面向开发者的系列课程全新上线

阿里巴巴云原生

阿里云 云原生

借助阿里云 AHPA,苏打智能轻松实现降本增效

阿里巴巴云原生

阿里云 容器 云原生 AHPA

我的sql没问题为什么还是这么慢|MySQL加锁规则

做梦都在改BUG

Java MySQL 数据库

在云原生和裸金属环境开展NFS存储性能比对测试

QE_LAB

云原生 性能测试

运维训练营第16周作业

好吃不贵

解锁智能合约的力量:区块链入门教程

领创集团Advance Intelligence Group

区块链 智能合约 以太坊

龙蜥LoongArch架构研发全揭秘,龙芯开辟龙腾计划技术合作新范式

OpenAnolis小助手

操作系统 龙蜥社区 龙腾计划 龙芯中科 LoongArch

3.基于Label studio的训练数据标注指南:文本分类任务

汀丶人工智能

信息抽取 数据标注 文本分类 labelstudio

最佳实践 | 基于腾讯云MRCP-Server打造简单智能外呼系统

牵着蜗牛去散步

人工智能 腾讯云 腾讯 语音识别 智能外呼系统

深度访谈 Vland CTO:像乐高一样搭建元宇宙

万事ONES

元宇宙 访谈

听说你没法在 JRE 中使用 arthas?不,你可以

阿里巴巴云原生

Java 阿里云 容器 云原生

《数据治理行业实践白皮书》正式发布,开辟数据治理新范式(附下载)

袋鼠云数栈

数据治理

请你喝一杯 Corretto?谈一谈 JDK 的新选择

亚马逊云科技 (Amazon Web Services)

Java jdk

安全高效 | AIRIOT智慧工地管理解决方案

AIRIOT

物联网 智慧工地

解读场景化视频制作工具的实现过程

阿里云CloudImagine

云计算 智能生产

2022 IoTDB Summit:国网信通谢可《Apache IoTDB 在国家电网的应用案例》

Apache IoTDB

数据库·

【技术干货】第1篇:有道实况OCR技术

有道技术团队

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