文档章节

码云目前已经初步支持 Git 部分克隆

Force武装卫队
 Force武装卫队
发布于 01/17 12:20
字数 643
阅读 2.1W
收藏 10

最近 Git 2.25.0 发布,此次发布推出了 partial clones 功能,partial clones 即用户克隆远程存储库的时候,可以选择只下载自身所需的对象,而不是存储库的所有对像(或者特定 commit 所关联的所有对像)。这和微软之前发布的 VFSForGit 原理有异曲同工之妙。使用部分克隆可以大大的减小用户克隆巨大存储库的耗时,也会减小网络数据传输。部分克隆完全依赖 Git Wire Protocol (v2 Protocol)。经过几行代码的适配和线上的批量更新,Gitee 目前已经支持部分克隆了,当你的 Git 版本大于等于 2.25.0,则可以使用如下的命令克隆特定的存储库:

git -c protocol.version=2 clone --filter=blob:none git@gitee.com:YOUR-COUNT/YOUR-REPO.git

在这个命令中 -c protocol.version=2 确保始终使用 v2 协议(当然可以 git config -g protocol.version=2 设置始终使用 v2 协议), --filter 则对克隆过程进行过滤,详细说明如下:

filter-spec details example
--filter=blob:none 忽略所有 Blob,只会下载将被检出的对象 N/A
--filter=blob:limit=<n>[kmg] 限制 Blob 大小,超过多大的就忽略了 --filter=blob:limit=10M
--filter=sparse:oid=<blob-ish> 稀疏检出相关
--filter=tree:<depth> 限制 tree(目录)深度 --filter=tree:2

更多的部分克隆过滤器参数信息可以参考:rev-list-options.txt#L735-L780

基于部分克隆实现稀疏检出(这里需要提前设置 git -c protocol.version=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 .

关于稀疏检出的更多细节可以参考相关文档。

与浅表克隆不同的是,部分克隆能够创建提交,这和微软发布的 VFSforGit 类似,但 VFSforGit 实现了文件系统驱动级别的过滤器,可以使用文件系统占位符避免文件的下载,在读写这些文件时,ProjFS 则会从远程存储库下载这些文件。综合来看,Git 的部分克隆是一个巨大的进步,但还有很大的进步空间。

Git 2.25.0 更新信息如下:

© 著作权归作者所有

Force武装卫队

Force武装卫队

粉丝 206
博文 29
码字总数 65879
作品 3
深圳
高级程序员
私信 提问
加载中

评论(22)

W
Wenvki0
赞,在境内速度比GitHub快多啦,哈哈。
海诺者
海诺者
我觉得应该是研发 部份文件权限
陨落人间
陨落人间
说白了就是full clone太占空间,git需要大量的服务器空间,长期以往,地主家也没有余粮。
兮若
兮若
感觉背离的git创建之初的思想,如果这样为啥不用svn?难道仅仅是大家都在用?
Kit_lee
Kit_lee
升级了git 2.25, 但全局配置 git config -g protocol.version=2 报没有-g参数,改为 --global 则报没有protocol.version这个键值
快乐的一只小青蛙
快乐的一只小青蛙
git config --global protocol.version 2
凯撒大弚
凯撒大弚
niubility
wilson_wh
wilson_wh
顶首长!👍
容儿2015
GIT厉害啊
温柔如斯
温柔如斯
以后会不会出现仅限部分拉取的权限。而不能整体拉取呢。
中心就永远是中心了
心心念叨的人
对于大的github库可以这么搞,gitee就算了吧,本身国内就很快,我赞同楼上说的,本地不全量,万一仓库坏了或者被恶意删除了咋办
Kit_lee
Kit_lee
如果本地根本不考虑回溯到某个版本,本地不全量对于仓库是否坏了或远端恶意删除这些都不受影响吧?我觉得支持部分克隆只是一个option,各人有各人的角色,管备份的全量,开发的部分克隆,这样的确更加灵活
码云已经支持 Git Wire Protocol

前言 两个半月前,Google 开发者宣布了 Git Wire Protocol,即 Git v2 协议,Git Wire Protocol 协议改进了 Git 的传输过程,增加了可扩展性。关于协议的背景和细节介绍,大家可以去 《码云即...

Force武装卫队
2018/09/05
1.9K
9
Visual Studio 的码云扩展 - Gitee Extension for Visual Studio

Visual Studio 的码云扩展 安装 当前发布版本 Visual Studio Marketplace 最新构建版本 Open VSIX Gallery 注:Gitee.VisualStudio 只支持 Visual Studio 2015/2017/2019。 使用 Visual Stu......

麦壳饼
2019/03/20
1.1K
0
码云平台 ATOM Editor 扩展

[背景] 码云是开源中国推出的基于 GIT 的代码托管平台,现准备推出 ATOM Editor 的码云扩展。 ATOM Editor 是 Github™ 公司推出的一款非常流行的源代码编辑器,目前码云上有非常多的开发者 ...

Force武装卫队
2016/09/01
127
0
码云的 ATOM Editor 扩展

[背景] 码云是开源中国推出的基于 GIT 的代码托管平台,现准备推出 ATOM Editor 的码云扩展。 ATOM Editor 是 Github™ 公司推出的一款非常流行的源代码编辑器,目前码云上有非常多的开发者 ...

Force武装卫队
2016/06/07
74
0
码云的 Visual Studio™ 扩展

[背景] 码云是开源中国推出的基于 GIT 的代码托管平台,现准备推出 Visual Studio 的码云扩展。 Visual Studio™ 是 Microsoft™ 公司推出的一款非常流行的集成开发工具,目前码云上有非常多...

Force武装卫队
2016/05/17
1.1K
4

没有更多内容

加载失败,请刷新页面

加载更多

Java Switch Case 条件判断

Java的 Switch Case 语句,可以理解为分支 例子 假设打麻将有四个人 编号为 1 2 3 4 对应名字为 张三,李四,王五,赵六 数据结构 switch(expression){ case value : //语句 ...

月小升
28分钟前
36
0
2020-02-22

tanglei302wqy/tlmall-springboot-ii axios配置及使用(发起请求时带上token)

miaojiangmin
37分钟前
40
0
基于进程退出代码退出Shell脚本

我有一个执行许多命令的shell脚本。 如果任何命令以非零退出代码退出,如何使shell脚本退出? #1楼 http://cfaj.freeshell.org/shell/cus-faq-2.html#11 如何在cmd1|cmd2获取cmd1的退出代码 ...

javail
39分钟前
54
0
网站被挂马该怎么彻底的解决 2020年技术篇分享

在网站运营以及优化这方面总是会有一些无所事事的人,冒着风险做各种各样的违规行为的工作,有的时候忽然发现自己的公司网站,就被他人直接挂了木马,那些超链接鼠标点击进来,全部都是灰色内...

网站安全
56分钟前
52
0
php环境搭建+Hello World

1 概述 基础教程,搭建php入门基本环境.环境win10. 2 安装php 2.1 下载 官网点击这里 2.2 安装 其实只需要添加环境变量即可.win+Pause,高级系统设置: Path这里新建一个,刚才的php目录. 2.3 测...

氷泠
59分钟前
52
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部