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



我想使用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参数仍然是不成熟的功能,并伴随着一些安全问题。因此,此功能将在短期内不支持。

这是Gitlab 13.0(2020年5月)

支持的

使用部分克隆排除大文件

通常不建议将大型二进制文件存储在git中,因为此后克隆或获取更改的每个人都会下载每个大文件。
这是缓慢的,即使不是从缓慢或不可靠的Internet连接工作时的完全阻塞。

在GitLab 13.0中,已针对Blob尺寸过滤器启用了部分克隆,并且对其他过滤器进行了实验。

这允许将麻烦的大文件排除在克隆和获取之外。当Git遇到缺失的文件时,将按需下载它。

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

(另请参见"什么是git clone --filter选项的语法?")

在我们最近的博客" git partial clone如何让您仅获取所需的大文件"中,请访问 james> 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

导致下载价值约4.7k对象的2.15mib。如果您想做的就是知道库存中的文件是什么。

由于您在tree:none中提到,所以我也对此进行了测试。现在它导致fatal: expected 'tree:<depth>',我以下实验表明只有tree:0起作用,这导致在裸露的存储库中下载603bytes。如果您尝试克隆并结帐,则Git将慢慢找出所需的对象并克隆整个仓库。高于0的数字在:fatal: remote error: filter 'tree' not supported (maximum depth: 0, but got: 1)

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

从GitLab 12.4(发布2019-10-22)开始,部分克隆已被添加为自托管实例的可选α功能。您可以通过功能标志API启用IT实例:

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

最新更新