如何在 git 存储库中找到未跟踪(和未忽略)文件的完整列表?

How to find a complete list of untracked (and non-ignored) files within a git repository?

在特定的 <directory> 下(在 git 存储库中),
我想要一份完整的文件列表:

有没有简单的方法来做到这一点?

请注意,虽然 git status 确实列出了 忽略的未跟踪文件,
它无法列出 git 存储库中任何未跟踪的子目录中的实际文件。

是的,通过使用 git ls-files

git ls-files -o --exclude-standard [directory]
  • -o 在输出中显示其他(即未跟踪的)文件
  • --exclude-standard 添加标准 Git exclusions
    从每个目录中的 .gitignore.git/info/exclude~/.gitignore_global.

这是一个示例 git 存储库,其中包含 2 个新的未跟踪本地文件。两者都在新添加的未跟踪目录中。其中一个未跟踪文件与 .gitignore.

中指定的模式 *.o 匹配
~/linux-stable$ ls -lR kernel/untracked-dir/
kernel/untracked-dir/:
total 8
-rw-rw-r-- 1 cvs cvs 7 Sep  2 18:46 untracked-ignored-file.o
-rw-rw-r-- 1 cvs cvs 7 Sep  2 18:46 untracked-non-ignored-file.c

运行 git status仅列出新的未跟踪子目录,而不是

中的单个文件
~/linux-stable$ git status kernel/
On branch master
Your branch is up-to-date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

kernel/untracked-dir/

nothing added to commit but untracked files present (use "git add" to track)

Whereas using git ls-files -o --exclude-standard, we get :

~/linux-stable$ git ls-files -o --exclude-standard 
kernel/untracked-dir/untracked-non-ignored-file.c

i.e. the actual list of untracked-files (including the ones within any untracked directories).