我想使用git的partialClone
功能。在此answer中,我看到了git clone --filter=tree:none <repo>
命令。
但是当尝试在github上执行时,提示warning: filtering not recognized by server, ignoring
。它没有用。
我想知道GitHub网站是否不支持它,或者我的设置是否有问题。
我问GitHub的反馈人员,但没有得到技术人员的答复。
答案 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)
使用部分克隆排除大文件
通常不建议在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 阅读更多信息。
请参见documentation和issue。
答案 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 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托管的存储库上使用此功能。