Git 2.25.0 发布,新特性:部分 clone 与稀疏 checkout
Git 2.25.0 发布了,项目贡献者 Taylor Blau 介绍了此版本带来的一些特性上的亮点,包括部分克隆(partial clone)与稀疏检出(sparse checkout)。
partial clone,部分克隆
一般来说,Git clone 时副本会复制仓库的所有数据,包括历史记录中每个文件的每个版本,对于非常大的存储库,如果只需要文件的一部分,那会无形中增加网络传输和本地存储的成本。在过去的几个版本中,Git 拥有了执行部分克隆的能力,这意味着它现在可以克隆并使用存储库部分内容而无需拥有所有内容。
目前该特性还处于实验阶段。
具体来讲,部分克隆需要客户端做两件事:它必须能够告诉服务器它只需要存储库中的哪些对象,同时还必须能够不与缺少完整对象集的本地存储库产生冲突。另一方面,服务器则必须能够解释客户端的请求,仅服务于某些对象,并能够生成适当的响应。
这其中必要的逻辑是需要 Git 在收到服务器的响应后能够跳过检出存储库,因为一旦检出,那么它就会发现 clone 的对象不完整,并尝试向服务器请求。实际上这一功能由另一个新特性实现:sparse checkout,稀疏检出。
sparse checkout,稀疏检出
稀疏检出实际上是一个类似于 .gitignore 的文件路径模式匹配列表,告诉 Git 在检出存储库时可以跳过哪些对象,它的工作对象是副本内容,而不像 .gitignore 是索引。
稀疏检出有一个缺点就是很难指定,比如下边是为了跳过检出深度大于等于 2 的文件:
$ git clone --filter=blob:none --no-checkout /your/repository/here repo $ cd repo $ cat >.git/info/sparse-checkout <<EOF /* !/* EOF $ git config core.sparseCheckout 1 $ git checkout .
首先,指定 --filter = blob:none 要求服务器避免向我们发送 blob,随后使用 --no-checkout 告诉 Git 在检出存储库时跳过 /your/repository/here 这部分,但它实际上还要依赖于 .git/info/sparse-checkout
中的模式匹配。
Git 2.25 中,通过引入新的 git sparse-checkout 命令,让这一操作更加简便。以下是与上边相同功能的 demo:
$ git clone --filter=blob:none --sparse /your/repository/here repo
该git sparse-checkout
命令使用户可以尽可能轻松地进行部分克隆和稀疏检出,无需将复杂的.gitignore
模式匹配编写到.git/info/sparse-checkout
,git sparse-checkout
会直接处理。
git sparse-checkout
可以做四件事:设置(set)要检出的路径列表、打印(list)当前列表以及完全启用(enable)或禁用(disable)稀疏检出。
要检出新路径,只需执行以下命令:
$ git sparse-checkout set /path/to/check/out
此外,对于非常大的仓库,稀疏检出模式匹配列表会过于繁杂,Git 现在提供了一种 cone 模式,执行git config core.sparseCheckoutCone
进入该模式,允许的模式匹配集将变得更加严格,可以直接指定是否在给定子目录内检出所有路径或所有文件,而不是通过 .gitignore 模式匹配。
例如,如果在大型存储库中有一个目录 A/B/C,而 C 是平时执行大部分工作的位置,则它可能需要被完全检出,但同时还需要让 A 和 B 检出足够多的内容,以便可以到达 C。在 cone 模式下, git sparse-checkout set A/B/C
可以做到这一点。
关于 Git 2.25 的更新内容,详情查看:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kotlin 1.4 和未来值得期待的地方
Kotlin 1.4 将于 2020 年春季推出,其开发团队在博客介绍了他们对 Kotlin 的愿景:“让 Kotlin 成为您所有工作的可靠伴侣,并是您执行任务的默认语言选择。”因此,开发团队将会让开发者在所有平台上都能使用 Kotlin。 据开发团队的介绍,Kotlin 1.4 将侧重于质量和性能。因为对现在的 Kotlin 来说,提高整体体验比添加新功能更加重要。此外,因为构建速度通常是用户最关心的问题,所以开发团队正在不断改进工具链以解决此问题。但是逐步改进跟不上生产代码库的自然增长:尽管开发团队加快了编译速度,但用户编写了更多的代码,使总体构建时间还不够短。为此,开发团队计划重新实现编译器以使其更快速。 新的编译器 新编译器实现的目标是变得更快速、统一 Kotlin 支持的所有平台,并提供用于编译器扩展的 API。这将是一项多年的工作,不过开发团队已开始好一阵子了,因此新实现的某些部分将在 1.4 中发布,可让这个过程变得更加平顺。 有些功能也已经发布了; 例如,如果开发者尝试了用于类型推理的新算法,它是新编译器的一部分。其他部分的处理方法相同。 也就是说,两种版本都将在一段...
- 下一篇
QQ 机器人平台 Newbe.Mahua 1.18.1 发布,修复缺陷版本
开篇一张图,功能全靠编。 QQ机器人平台意指那些支持通过QQ进行消息收发和群员软件平台。 使用该SDK开发可以实现一次开发,运行于多个不同QQ机器人平台平台的绝佳体验。 基于SDK开发,可以实现包含但不限于以下功能: QQ消息智能回复 通过QQ发送图片 QQ名片点赞 QQ群成员管理 @指定QQ群成员发送消息 点击此处开始你的第一个QQ机器人吧 版本亮点 修复 CQP 打包错误 若当前打包的类库中引用了非.Net 的类库,可能在打包时出现错误。因此进行了修复。(#15) 升级注意 从 1.18 版本直接更新全部的 Newbe.Mahua.* nuget 包,重新生成便可以。 升级过程中需要覆盖 build.bat 和 build.ps1 文件。若有自行定制的内容,请提前保留备份。 VS 插件更新只需要按照 VS 提示进行操作即可。 Rider 用户更新项目模板,只需在控制台中运行以下命令即可: dotnet new -i Newbe.Mahua.Template
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用