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

Posted

技术标签:

【中文标题】GitHub 和 GitLab 是不是支持 git clone 的 --filter 参数?【英文标题】:Do GitHub and GitLab support git clone's --filter parameter?GitHub 和 GitLab 是否支持 git clone 的 --filter 参数? 【发布时间】:2019-08-07 07:11:57 【问题描述】:

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

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

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

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

【问题讨论】:

具体例子在:***.com/questions/600079/… 【参考方案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)

【讨论】:

【参考方案2】:

GitLab 13.0 (May 2020)支持此功能

使用部分克隆排除大文件

通常不鼓励在 Git 中存储大的二进制文件,因为每个添加的大文件都会被之后克隆或获取更改的每个人下载。 当使用缓慢或不可靠的互联网连接工作时,这很慢,如果不是完全阻塞的话。

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

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

克隆项目时,使用 --filter=blob:none--filer=blob:limit=1m 完全排除 blob 或按文件大小排除。 注意,部分克隆至少需要 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

请参阅 documentation 和 issue。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

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

从 OP 2019-03-21 更新:

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

【讨论】:

感谢您的回答。不久前,我收到了来自github的官方回复。他们认为 --filter 参数仍然是一个不成熟的特性,并且伴随着一些安全问题。因此,短期内不会支持此功能。我会继续等待,等官方支持这个功能的时候再更新这个问题。 @Ph0rse,感谢您的更新。我已将其纳入我的答案中。

以上是关于GitHub 和 GitLab 是不是支持 git clone 的 --filter 参数?的主要内容,如果未能解决你的问题,请参考以下文章

git github gitlib gitlab分别是啥,有啥区别

开源Git代码托管平台

gitlab 原理

将 Git 存储库从 GitHub 分叉到 GitLab

git与gitlab的区别 git与gitlab有啥区别

如何绕过:远程:GitLab:作者 是不是团队中的一员?