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

原创
01/17 12:20
阅读数 2.6W

最近 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 更新信息如下:

展开阅读全文
打赏
6
11 收藏
分享
加载中
/your/repository/here repo 这个啥意思,我去就不能说明白点吗
05/26 11:00
回复
举报
赞,在境内速度比GitHub快多啦,哈哈。
02/16 16:20
回复
举报
我觉得应该是研发 部份文件权限
01/25 07:52
回复
举报
说白了就是full clone太占空间,git需要大量的服务器空间,长期以往,地主家也没有余粮。
01/19 22:57
回复
举报
感觉背离的git创建之初的思想,如果这样为啥不用svn?难道仅仅是大家都在用?
01/19 13:21
回复
举报
升级了git 2.25, 但全局配置 git config -g protocol.version=2 报没有-g参数,改为 --global 则报没有protocol.version这个键值
01/19 12:09
回复
举报
git config --global protocol.version 2
01/19 13:41
回复
举报
niubility
01/19 10:47
回复
举报
顶首长!👍
01/19 10:23
回复
举报
GIT厉害啊
01/19 09:55
回复
举报
以后会不会出现仅限部分拉取的权限。而不能整体拉取呢。
中心就永远是中心了
01/19 09:16
回复
举报
更多评论
打赏
23 评论
11 收藏
6
分享
返回顶部
顶部