如何让 git 递归列出所有未跟踪的文件?

pet*_*est 12 git bash

我正在尝试获取未跟踪文件的列表以便以编程方式使用。

但是我似乎无法让 git 报告未跟踪目录中的未跟踪文件。它始终只列出包含文件的最低级别目录。

我试过了:

git status --untracked-files=all
Run Code Online (Sandbox Code Playgroud)

git ls-files --others --exclude-standard
Run Code Online (Sandbox Code Playgroud)

暂存目录中的任何文件都会使 git 报告目录中的所有其他文件,但我真的不想这样做。

另外,我可以使用 bash 列出所有文件 - 但随后我必须让 git 告诉我哪些文件被 gitignored。

有没有办法纯粹用git来做到这一点?或者以其他方式使用其他工具来实现此目的的有效方法?

Von*_*onC 4

\n

Git 不会扩展未跟踪的文件夹,这些文件夹也是 Git 存储库

\n
\n

这些被称为“嵌套 Git 存储库”,并在 Git 存储库中记录为gitlinks,这是父存储库索引中的一个特殊条目。

\n

由于它们是一个条目(一种特殊的“文件”),因此它们不会关心-untracked-files=all.

\n
\n

请注意,如果您确实使用-untracked-files=all,请与 Git 2.38(2022 年第 3 季度)一起使用,其中修复了 2.37 中引入的导致 write-tree 无法将不存在的索引写为树的错误。

\n

请参阅Martin \xc3\x85gren ( )的提交 4447d41(2022 年 7 月 22 日)。\n (由Junio C Hamano 合并 -- --提交 f1a0db2中,2022 年 8 月 3 日)none
gitster

\n
\n

read-cache:do_read_index()始终设置istate->repo

\n

报告人:Joey Hess
\n签署人:Martin \xc3\x85gren

\n
\n
\n

如果没有索引文件,例如,因为存储库刚刚创建,我们会提前返回零(除非must_exist让我们死掉)。

\n

这种提前返回意味着我们不成立istate->repo
\n使用core.untrackedCache=true,最近的e6a6535 (" untracked-cache: support \' --untracked-files=all\' ifconfigured", 2022-03-31, Git v2.37 -- mergeistate->repo ) 最终将作为空指针传递给repo_config_get_string(),导致分段错误。

\n

istate->repo如果我们确实达到了这个早期回报,请像我们实际读取索引时那样进行设置。

\n
\n