0

我正在尝试运行git ls-files并从中排除特定目录。该--exclude标志是否仅排除文件模式,而不排除目录?

git ls-files -x */util/*

4

2 回答 2

1

正如文档所说,-x采用模式参数,因此它只排除模式。

但是 Git 只存储文件:“目录”或“文件夹”只存在于计算机操作系统的想象中——唉,现实中——而不是 Git。Git只有命名的文件foo/util/bar或其他文件。但这很好:如果您的计算机坚持将一个名为的文件存储在一个名为bar的目录/文件夹中,该目录/文件夹util位于一个名为的目录/文件夹foo中,当 Git 存储一个名为的文件foo/util/bar时,该模式 */util/*与 Git 的文件名匹配。

请注意,它-x仅排除未跟踪的文件,因此它仅影响git ls-files打印在工作树中找到的文件名称的调用,而不影响打印在索引中找到的文件名称的调用。存储在索引中的文件确实有可能包含斜杠的长名称,例如dir/sub/file.ext索引无法存储目录/文件夹。(这就是Git 无法存储空目录的原因。Git 从索引中的任何内容构建新提交,而索引不存储目录,因此 Git 无法构建包含空目录的提交。)

于 2020-02-26T22:39:51.343 回答
1

要使排除模式适用于跟踪的文件,请要求排除和跟踪的文件并反转您的模式。

所以如果你想列出所有被跟踪的和media目录之外的东西,

git ls-files -ix\* -x'!media/*'

它默认列出跟踪的文件并匹配该模式序列。

要过滤跟踪和未跟踪,git ls-files -ocix\* -x'!media/*'

于 2020-08-31T23:11:05.043 回答