我正在尝试运行git ls-files
并从中排除特定目录。 --exclude
标志仅排除文件模式,而不排除目录吗?
git ls-files -x */util/*
答案 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/*'