我想使用git的partialClone
功能。在这个答案中,我看到了git clone --filter=tree:none <repo>
命令。
但是尝试在github上执行时,提示warning: filtering not recognized by server, ignoring
. 它不起作用。
我想知道是不是GitHub网站不支持,还是我的设置有问题。
我问了 GitHub 的反馈人员,没有得到技术人员的答复。
几乎可以肯定 GitHub 或 GitLab 还不支持这一点。
该--filter
选项正在积极开发中,尚未真正准备好用于通用用途。GitHub关于 2018 年 9 月发布 Git 2.19 的博客文章说
请注意,大多数公共服务器尚不支持该功能,但您可以使用
git clone --filter=blob:none
本地 Git 2.19 安装。
一旦这个功能变得更加完善并且主机开始支持它,我相信他们不会悄悄地这样做。据我所知,目前还没有主要的云提供商发布过这样的公告。
从 OP 2019-03-21 更新:
不久前,我收到了来自github的官方回复。他们认为该
--filter
参数仍然是一个不成熟的功能,并伴随着一些安全问题。因此,短期内不会支持此功能。
使用部分克隆排除大文件
通常不鼓励在 Git 中存储大的二进制文件,因为每个添加的大文件都会被之后克隆或获取更改的每个人下载。
从缓慢或不可靠的互联网连接工作时,如果不是完全阻塞,这很慢。在 GitLab 13.0 中,已为 blob 大小过滤器启用了部分克隆,并在实验中为其他过滤器启用了部分克隆。
这允许从克隆和提取中排除麻烦的大文件。当 Git 遇到丢失的文件时,会按需下载。
克隆项目时,使用
--filter=blob:none
或--filer=blob:limit=1m
完全或按文件大小排除 blob。
注意,部分克隆至少需要 Git 2.22.0。
(另见“什么是git clone --filter
选项的语法? ”)
在我们最近的博客“ Git Partial Clone 如何让你只获取你需要的大文件”中阅读更多内容,来自 James Ramsay。
虽然我找不到有关支持的官方博客文章或新闻,但GitHub 确实似乎正在推出--filter
支持。
$ git clone --bare --single-branch --depth=1 https://github.com/torvalds/linux
结果下载了价值 195.82MiB 的大约 74k 个对象。
$ git clone --bare --single-branch --depth=1 --filter=blob:none https://github.com/torvalds/linux
结果下载了价值 2.15MiB 的大约 4.7k 个对象。如果您只想知道存储库中有哪些文件,那么数据量将减少 91 倍。
既然你提到tree:none
我也测试过。现在它的结果是fatal: expected 'tree:<depth>'
,我的以下实验表明它只能tree:0
工作,这会导致在一个裸仓库中下载 603 字节左右。如果你尝试克隆和结帐,那么 git 会慢慢找出它需要的对象并克隆整个 repo。大于 0 的数字会导致:fatal: remote error: filter 'tree' not supported (maximum depth: 0, but got: 1)
从 GitLab 12.4(2019-10-22 发布)开始,部分克隆已添加为自托管实例的可选 alpha 功能。您可以通过功能标志 api 在实例范围内启用它:
curl --data "value=true" --header "PRIVATE-TOKEN: <your_access_token>" https://gitlab.example.com/api/v4/features/gitaly_upload_pack_filter
您可以在此处获取更多信息: https ://docs.gitlab.com/ee/topics/git/partial_clone.html
需要明确的是:在上次编辑此答案时,您不能将此功能与 gitlab.com 托管的存储库一起使用。