git ls-files 排除目录中的文件
git ls-files exclude files in a directory
我正在尝试 运行 git ls-files
并从中排除特定目录。 --exclude
标志是否只排除文件模式,而不排除目录?
git ls-files -x */util/*
正如 the documentation 所说,-x
采用 模式 参数,因此它仅排除模式。
但 Git 仅 存储 文件:"directories" 或 "folders" 仅存在于您的想象中,唉,现实中计算机的操作系统,不在 Git 中。 Git 只是 files 命名为 foo/util/bar
或其他。但这没关系:如果您的计算机坚持将名为 bar
的文件存储在名为 util
的 directory/folder 中,当 Git 时存储在名为 foo
的 directory/folder 中正在存储一个名为 foo/util/bar
的 文件 , 模式 */util/*
匹配 Git 的文件名。
请注意,-x
仅排除 未跟踪的 文件,因此它仅影响 git ls-files
打印工作树中找到的文件名称的调用,不是那些打印在索引中找到的文件的名称。存储在索引中的文件字面上确实有可能包含斜线的长名称,例如 dir/sub/file.ext
:index 无法存储目录/文件夹。 (这就是 为什么 Git 不能存储空目录。Git 从索引中的任何内容构建新的提交,并且索引不存储目录,所以 Git 无法构建包含空目录的提交。)
要使排除模式适用于跟踪的文件,请请求 excluded-and-tracked 个文件并反转您的模式。
因此,如果您想列出 media
目录之外的所有被跟踪的内容,
git ls-files -ix\* -x'!media/*'
默认列出跟踪的文件并匹配该模式序列。
要过滤跟踪和未跟踪,git ls-files -ocix\* -x'!media/*'
我正在尝试 运行 git ls-files
并从中排除特定目录。 --exclude
标志是否只排除文件模式,而不排除目录?
git ls-files -x */util/*
正如 the documentation 所说,-x
采用 模式 参数,因此它仅排除模式。
但 Git 仅 存储 文件:"directories" 或 "folders" 仅存在于您的想象中,唉,现实中计算机的操作系统,不在 Git 中。 Git 只是 files 命名为 foo/util/bar
或其他。但这没关系:如果您的计算机坚持将名为 bar
的文件存储在名为 util
的 directory/folder 中,当 Git 时存储在名为 foo
的 directory/folder 中正在存储一个名为 foo/util/bar
的 文件 , 模式 */util/*
匹配 Git 的文件名。
请注意,-x
仅排除 未跟踪的 文件,因此它仅影响 git ls-files
打印工作树中找到的文件名称的调用,不是那些打印在索引中找到的文件的名称。存储在索引中的文件字面上确实有可能包含斜线的长名称,例如 dir/sub/file.ext
:index 无法存储目录/文件夹。 (这就是 为什么 Git 不能存储空目录。Git 从索引中的任何内容构建新的提交,并且索引不存储目录,所以 Git 无法构建包含空目录的提交。)
要使排除模式适用于跟踪的文件,请请求 excluded-and-tracked 个文件并反转您的模式。
因此,如果您想列出 media
目录之外的所有被跟踪的内容,
git ls-files -ix\* -x'!media/*'
默认列出跟踪的文件并匹配该模式序列。
要过滤跟踪和未跟踪,git ls-files -ocix\* -x'!media/*'