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

git ls文件排除目录中的文件,git,git-ls-files,Git,Git Ls Files,我试图运行gitls文件,并从中排除特定目录。--exclude标志是否仅排除文件模式,而不排除目录 git ls files-x*/util/*正如所说,-x接受一个模式参数,因此它只排除模式 但Git只存储文件:“目录”或“文件夹”只存在于计算机操作系统的想象和现实中,而不是Git中。Git只有名为foo/util/bar或其他任何文件。但这很好:如果您的计算机坚持在名为util的目录/文件夹中存储名为bar的文件,当Git存储名为foo/util/bar的文件时,*/util/*模式与Gi

我试图运行
gitls文件
,并从中排除特定目录。
--exclude
标志是否仅排除文件模式,而不排除目录

git ls files-x*/util/*

正如所说,
-x
接受一个模式参数,因此它只排除模式

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


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

要使排除模式对跟踪文件起作用,请请求排除和跟踪的文件,并反转模式

因此,如果您想列出所有被跟踪的内容以及
媒体
目录之外的内容

git ls-files -ix\* -x'!media/*'
它默认为列出跟踪的文件并匹配该模式序列


要同时过滤跟踪和未跟踪的,
git ls文件-ocix\*-x'!媒体/*'

啊,我错过了关于未跟踪文件的部分。所以说真的,
-x
是没用的,除非你通过
-o
包含未跟踪的文件?@user1795832:非常好,谢谢。所以,如果我想从与模式匹配的
ls文件中排除文件,这可能吗?假设我有两个文件,
foo/bar/util/baz/test.txt
foo/bar/util/qux/test.txt
,我可以用一个排除模式排除它们吗?嗯,
foo/bar/util/*/test.txt
将两者都匹配,但也将匹配
foo/bar/util/plugh/test.txt
。如果那是你想要的,那很好;如果不是,可能要避免
*
全局匹配。还请注意,您可以使用
**
匹配零个或多个组件名称,因为
-x
参数的处理方式与
.gitignore
文件中的行相同。有关如何排除文件,请参阅