git ls-files排除目录中的文件

时间:2020-02-26 22:14:42

标签: git git-ls-files

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

git ls-files -x */util/*

2 个答案:

答案 0 :(得分:1)

正如the documentation所说,-x采用 pattern 参数,因此它仅排除模式。

但是Git仅存储个文件:“目录”或“文件夹”仅存在于计算机操作系统的想象力中,而实际上,它们并不存在于Git中。 Git仅具有名为foo/util/bar文件。但这很好:如果您的计算机坚持在Git存储 file <时将名为bar的文件存储在名为util的目录/文件夹的目录/文件夹中, / em>命名为foo模式 foo/util/bar与Git的文件名匹配。

请注意,*/util/*仅排除未跟踪的文件,因此它仅影响-x调用,这些调用将打印在工作树中找到的文件名,而不打印那些在工作树中找到的文件名。在索引中找到的文件名。实际上,存储在索引中的文件确实具有可能包含斜杠的长名称,例如git ls-files index 无法存储目录/文件夹。 (这是为什么 Git无法存储空目录。Git通过索引中的内容构建新的提交,并且索引不存储目录,因此Git无法构建包含空目录的提交。)< / p>

答案 1 :(得分:0)

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

因此,如果要列出media目录之外的所有跟踪记录,

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

默认情况下将列出跟踪文件并匹配该模式序列。

要同时过滤已跟踪和未跟踪的内容,git ls-files -ocix\* -x'!media/*'