Git稀疏检出如何忽略特定文件类型

5
我有一个包含大量csv文件的git仓库,但我不想克隆它们。因此,我了解到了git sparse-checkout和这篇文章:https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/
从这篇文章中,我了解到以下内容:
git clone --no-checkout https://github.com/john_doe/repo-with-big-csv.git
cd repo-with-big-csv
git sparse-checkout init --cone

然后我编辑 .git/info/sparse-checkout 文件,并添加以下内容(参考自上面页面中的示例):

/*
!**/*.csv

但是它似乎无法正常工作。在执行git pull之后,一些文件夹被克隆了,一些没有。我还注意到一个警告,在执行git sparse-checkout list时会出现以下提示:

warning: unrecognized pattern: '**/*.csv'
warning: disabling cone pattern matching
/*
!**/*.csv

仅忽略特定文件类型的正确方法是什么?

1
** 似乎不符合优化的锥形布隆过滤器路径过滤模型。我认为网页上的例子描述得很差。(当然您可以不使用锥形模式。) - torek
1个回答

1
请参考 "Git sparse checkout with exclusion" 并确保使用 Git 2.26.x,该版本修复了 git sparse-checkout 命令 的一些问题。

在 cone 模式下,git sparse-checkout set 子命令需要一个目录列表而不是一个 sparse-checkout 模式列表。

如果 core.sparseCheckoutCone=true,那么 Git 将解析 sparse-checkout 文件并期望这些类型的模式。如果模式不匹配,则 Git 会发出警告。

您只需要基于文件夹前缀匹配使用限制模式。


OP Frode Akselsen 在评论中补充道:

我的示例实际上是有效的:不显示的文件夹只包含仅有的.csv文件,因此,在应用.git/info/sparse-checkout规则后,文件夹中再也没有任何内容,因此Git不会显示该文件夹。

我确认Git只会显示内容:如果文件夹没有文件(没有“内容”),则该文件夹不可见。


谢谢,我刚刚意识到我的示例实际上是有效的,那些没有显示出来的文件夹只包含 .csv 文件,因此,在应用了 .git/info/sparse-checkout 中的规则之后,文件夹中再也没有任何内容,因此 git 不会显示该文件夹。 - Frode Akselsen
2
@FrodeAkselsen 谢谢您提供这个有用的反馈。我已将您的评论加入答案中,以增加其可见性。 - VonC
@rkudinov 很抱歉听到这个消息。在您的具体情况下,需要什么才能解决您的问题? - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接