GitHub和GitLab是否支持git clone的--filter参数?

时间:2019-03-16 10:10:44

标签: git github gitlab jgit rugged

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

但是当尝试在github上执行时,提示warning: filtering not recognized by server, ignoring。它没有用。

我想知道GitHub网站是否不支持它,或者我的设置是否有问题。

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

4 个答案:

答案 0 :(得分:2)

几乎可以肯定,GitHub或GitLab尚不支持此功能。

--filter选项正在积极开发中,尚未真正适合通用用途。 GitHub的blog post about the release of Git 2.19 in September, 2018 says

  

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

一旦此功能变得更加完善,并且主机开始支持它,我相信他们不会悄悄地这样做。据我所知,尚未有主要的云提供商宣布这一消息。

从OP 2019-03-21更新:

  

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

答案 1 :(得分:1)

GitLab 13.0 (May 2020)

支持

使用部分克隆排除大文件

通常不建议在Git中存储大型二进制文件,因为添加的每个大文件都会被以后克隆或获取更改的每个人下载。
如果通过缓慢或不可靠的Internet连接进行工作,这会很慢,甚至不能完全阻塞。

在GitLab 13.0中,已为blob大小过滤器以及实验性的其他过滤器启用了部分克隆。

这允许将麻烦的大文件从克隆和提取中排除。当Git遇到丢失的文件时,将按需下载。

克隆项目时,请使用--filter=blob:none--filer=blob:limit=1m完全或按文件大小排除斑点。
请注意,部分克隆至少需要Git 2.22.0。

(另请参见“ What is the git clone --filter option's syntax?”)

在我们最近的博客“ How Git Partial Clone lets you fetch only the large file you need”中,从 James Ramsay 阅读更多信息。

请参见documentationissue

答案 2 :(得分: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

导致下载了约4.7k个对象的价值2.15MiB的对象。如果您只想知道存储库中的文件,则数据量要少91倍。

自从您在tree:none中提到以来,我也对此进行了测试。现在它得到fatal: expected 'tree:<depth>'的结果,而我的以下实验表明,只有tree:0可以工作,这导致在裸仓库中下载603字节左右的内容。如果您尝试克隆和检出,则git会慢慢找出所需的对象并克隆整个存储库。大于0的数字将导致:fatal: remote error: filter 'tree' not supported (maximum depth: 0, but got: 1)

答案 3 :(得分: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托管的存储库上使用此功能。