8

我想使用git的partialClone功能。在这个答案中,我看到了git clone --filter=tree:none <repo>命令。

但是尝试在github上执行时,提示warning: filtering not recognized by server, ignoring. 它不起作用。

我想知道是不是GitHub网站不支持,还是我的设置有问题。

我问了 GitHub 的反馈人员,没有得到技术人员的答复。

4

4 回答 4

4

几乎可以肯定 GitHub 或 GitLab 还不支持这一点。

--filter选项正在积极开发中,尚未真正准备好用于通用用途。GitHub关于 2018 年 9 月发布 Git 2.19 的博客文章说

请注意,大多数公共服务器尚不支持该功能,但您可以使用git clone --filter=blob:none本地 Git 2.19 安装。

一旦这个功能变得更加完善并且主机开始支持它,我相信他们不会悄悄地这样做。据我所知,目前还没有主要的云提供商发布过这样的公告。

从 OP 2019-03-21 更新:

不久前,我收到了来自github的官方回复。他们认为该--filter参数仍然是一个不成熟的功能,并伴随着一些安全问题。因此,短期内不会支持此功能。

于 2019-03-16T12:07:31.490 回答
2

GitLab 13.0(2020 年 5 月)支持此功能

使用部分克隆排除大文件

通常不鼓励在 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

请参阅文档问题

于 2020-05-22T21:55:46.230 回答
1

虽然我找不到有关支持的官方博客文章或新闻,但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)

于 2020-09-03T10:17:51.153 回答
0

关于 GitLab 中的部分克隆/备用结帐支持:

从 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 托管的存储库一起使用。

于 2020-01-28T10:48:32.737 回答