NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

jdk 源码系列之StringBuilder、StringBuffer

sinsy

Java jdk 源码解析

架构师训练营第三周作业

文智

极客大学架构师训练营

架构师训练营第三周学习总结

邓昀垚

极客大学架构师训练营

你在开发过程中使用Git Rebase还是Git Merge?

华为云开发者联盟

git 华为 管理 代码

原创视频 | 架构漫谈—如何创造复杂而有序的软件系统【含课件下载】

编程道与术

Java 编程 架构 软件开发 软件架构

原创 | 使用JPA实现DDD持久化-JPA vs MyBatis

编程道与术

Java hibernate 编程 mybatis jpa

LeetCode题解:641. 设计循环双端队列,使用双向链表,JavaScript,详细注释

Lee Chen

大前端 LeetCode

致谢!华为全联接2020精彩回顾

华为云开发者联盟

华为 华为云 智能 hdc

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

Apache Pulsar

开源 云原生 mqtt Apache Pulsar 消息中间件

华为云推出全自研数据库,GaussDB(openGauss)能否撑起一片天?

华为云开发者联盟

数据库 数据 gauss db

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

原创 | 使用JPA实现DDD持久化-JPA,Hibernate与Spring Data JPA

编程道与术

Java hibernate Spring C Data jpa

第二周-学习总结-框架设计原则

莫森

极客大学架构师训练营

第二周-命题作业

莫森

极客大学架构师训练营

信息公交服务在滴滴的应用实践

滴滴技术

滴滴技术 人工只能 信息公交 路径优化

为什么推广ipv6以及网站ipv6改造基本步骤

MySQL从删库到跑路

Web IP 网络

原创 | 使用JPA实现DDD持久化-O/R阻抗失配(2/2)

编程道与术

Java hibernate DDD JDBC jpa

数字货币视域下的金融安全实现路径

CECBC

区块链 数字货币

手把手教你:将 ClickHouse 集群迁至云上

腾讯云大数据

大数据 Clickhouse

一次注定失败的裸面

escray

ruby 程序员 面试 面经

线段树(Segment Tree)

zayfen

算法 线段树 segment tree

打造一个全功能的浏览器

Daniel

架构师第一期作业(第三周)

Cheer

作业

区块链带来的技术创新和变革

CECBC

区块链技术 经济

一篇文章搞定 Nginx 反向代理与负载均衡

哈喽沃德先生

nginx 负载均衡 反向代理 服务器 正向代理与反向代理

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

为什么90%的“码农”做不了软件“架构师”?

Java架构师迁哥

Java 学习 架构师

原创 | 正确区分属性和字段

编程道与术

Java hibernate 编程 软件开发 jpa

揭开500亿“区块链”骗局

CECBC

法律 传销

10多家公司的Java开发面试常见问题合集

Java架构师迁哥

2020面试阿里字节跳动90%被问到的JVM面试题附答案

Java架构师迁哥

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