什么是git克隆--filter选项';什么语法?

什么是git克隆--filter选项';什么语法?,git,Git,Git 2.17描述了此选项: 克隆和提取的机器,这又涉及到包装和 解包对象,已被告知如何使用 另一个主题引入的过滤机制。它现在知道了 将生成的文件包标记为承诺人文件包,以容忍丢失 对象,为“窄”克隆奠定基础。 这个标志准备好使用了吗,还是很可能很不稳定?有人知道传递的正确语法吗?我传递的任何标志都会被拒绝,因为它是无效的筛选器规范。例如,我尝试按目录进行筛选: git clone file://path --depth=1 --filter '--subdirectory-filter A

Git 2.17描述了此选项:

  • 克隆和提取的机器,这又涉及到包装和 解包对象,已被告知如何使用
    另一个主题引入的过滤机制。它现在知道了
    将生成的文件包标记为承诺人文件包,以容忍丢失
    对象,为“窄”克隆奠定基础。
这个标志准备好使用了吗,还是很可能很不稳定?有人知道传递的正确语法吗?我传递的任何标志都会被拒绝,因为它是无效的筛选器规范。例如,我尝试按目录进行筛选:

git clone file://path --depth=1 --filter '--subdirectory-filter Assets' TestRepo
git clone file://path --depth=1 --filter --subdirectory-filter Assets TestRepo
git clone file://path --depth=1 --filter Assets TestRepo

过滤器规格的格式在git rev list--help的选项部分中定义。你也可以。下面是它目前所说的:

--滤器= 仅适用于其中一个--objects*;从打印对象列表中忽略对象(通常为水滴)。可能是以下情况之一:

表单
--filter=blob:none
忽略所有blob

格式
--filter=blob:limit=[kmg]
忽略了大于n字节或单位的blob。n可以是零。后缀k、m和g可用于命名KiB、MiB或GiB中的单元。例如,blob:limit=1k与blob:limit=1024相同

表单
--filter=sparse:oid=
使用blob(或blob表达式)中包含的稀疏签出规范来忽略请求的引用上的稀疏签出不需要的blob

git clone--filter选项的语法是什么

Git 2.27(2020年第二季度)至少更清楚地说明了这一点

在此之前,这里是一个快速TLDR;该命令的示例,结合以下命令:

#最快的克隆速度:
git clone--filter=blob:none--no签出https://github.com/git/git
cd吉特
git稀疏签出init--cone
git读取树-mu头
这将仅返回顶部文件夹文件,默认情况下不包括任何子文件夹。
由于git clone--filter=blob:none--no checkout步骤,初始克隆速度更快


现在,转到
git clone--filter
选项的语法:

参见作者(2020年3月22日)
(于2020年4月22日合并)

:文档<代码>--过滤器选项 签字人:德里克·斯托利

事实证明,“
--filter=
”选项并没有记录在“
git clone
”页面的任何地方,而是在“git rev list”中详细说明,它的用途不同

在文档中添加一点关于此选项的信息。在“git克隆”文档中创建一个关于部分克隆作为一个概念以及它如何成为一种令人惊讶的体验的小节是值得的。例如,“git checkout”可能会触发包下载

目前的方案包括:

--过滤器=
: 使用部分克隆功能并请求服务器根据给定的对象筛选器发送可访问对象的子集

使用
--filter
时,提供的
用于部分克隆筛选器

例如,
--filter=blob:none
将过滤掉所有blob(文件内容),直到Git需要为止。
另外,
--filter=blob:limit=
将过滤掉所有大小至少为
的blob

有关过滤器规格的更多详细信息,请参阅中的
--filter
选项


这个选择没有我所希望的那么有用。(它不能用于组合
克隆
筛选分支

然而,这个过滤机制是与克隆相关联的机制的扩展,用于实现

但您的Git repo托管服务器必须支持目前支持的(2018年10月)

这意味着您可以将
--filter
git clone
一起使用,正如最新的git 2.20补丁所示(见下文)

然后将该筛选器添加到中的git fetch。
它是
的一部分 看,这是指


在Git 2.20(2018年第4季度)中,配置为延迟获取丢失对象的部分克隆将按需向原始克隆发出“
Git fetch
”请求 要填充尚未获取的对象的存储库。
该请求已针对请求树对象(而不是叶blob)进行了优化 通过告诉原始存储库 不需要水滴

参见。
(于2018年10月19日合并)

获取包
:在惰性获取树时排除blob 使用“
git clone--filter=tree:none
”可以获得缺少树的部分克隆 在这样的存储库中,当需要延迟获取树时,也会获取它直接或间接引用的任何树或blob,而不管原始命令是否需要这些对象,或者本地存储库是否已经拥有其中的一些对象

这是因为延迟获取所使用的获取协议没有 允许客户端请求只发送想要的对象,这 这将是理想的解决方案。此修补程序实现了部分解决方案: 指定“blob:none”过滤器,在一定程度上减少提取负载

当惰性地获取blob时,此更改没有任何影响(由于如何使用过滤器) 工作)。如果懒散地获取提交(这样的存储库很困难) 构建并不是我们非常支持的用例,但它确实是 可能),仍将获取引用的提交和树-只有 无法获取水滴

您可以通过以下方式看到进一步的优化:

参见,,(2018年9月27日)作者 (于2018年10月19日合并)

传输:允许跳过引用列表
get\u refs\u via\u connect()
函数都执行握手 (包括确定协议版本)并获取 远程引用

但是,fetch协议v2支持在不列出
$ git rev-list --filter=blob:nonse --objects HEAD
fatal: invalid filter-spec 'blob:nonse'
git clone --filter=blob:none --no-checkout \
https://kernel.googlesource.com/pub/scm/git/git
git -C git fetch