git status -> 显示将被添加(已暂存)在子目录中的文件

131

假设我在一个文件夹中开始了一个git仓库,并且该文件夹中有几个子目录。

我有几个globbing模式.gitignore来排除子目录中的文件。然而,当我在还没有暂存任何文件之前执行git status时,git status仅显示将被添加的子文件夹的名称,而不具体指出如果我使用git add .命令会添加哪些子目录中的文件(已暂存)。

有趣的是,当我使用git add .命令暂存文件后,git status明确列出了将要提交的文件。

是否有一种方法可以让git status明确列出将要暂存的文件?

6个回答

213

尝试:

git status -u

或者长形式:

git status --untracked-files

这个选项将显示未跟踪目录中的单个文件。

下面是来自git-status手册页-u选项的详细说明:

-u[<mode>]
--untracked-files[=<mode>]

显示未跟踪的文件。

模式参数可选(默认为all),用于指定未跟踪文件的处理方式;当不使用-u时,默认值为normal,即显示未跟踪的文件和目录。

可能的选项包括:

  • no - 不显示未跟踪的文件
  • normal - 显示未跟踪的文件和目录
  • all - 还显示未跟踪目录中的单个文件。

可以使用文档记录在git-config(1)中的status.showUntrackedFiles配置变量更改默认值。


18

您可以简单地使用

git add --dry-run .
在您的代码库根目录下有一个文件,它会列出所有在考虑.gitignore时将被添加的任何子目录中的文件。

在您的代码库根目录下有一个文件,它会列出所有在考虑.gitignore时将被添加的任何子目录中的文件。


7

0

你可以考虑在子目录中放置一个 .gitignore 文件,类似于以下方式:

# Ignore everything in this directory
*
# Except these file
!.gitignore
!file1
!file2
!file3

1
我的.gitignore里没有像你发布的那样忽略目录或子目录(即带有例外)。另外,这有什么关系吗?顺便说一下,git status命令返回正确的将被提交的文件列表,在使用git add .暂存后 - Amelio Vazquez-Reina
1
我知道你不知道。从根目录的.gitignore中删除该目录,并将此.gitignore添加到您的子目录中 - 您可以拥有多个。它们嵌套在一起。 - Adrian Cornish

0

很有可能是由于行尾符导致的。解决方案:

git config --global core.autocrlf true

但不要只是运行这个命令,在执行之前进行验证。使用 git diff,如果大多数文件没有显示差异,则是由于行结尾。善加利用。


-1

使用 git 命令 git ls-files -o 来列出未跟踪的文件

而不是 -o,使用 -c --cached 在输出中显示缓存的文件(默认)

-d --deleted 在输出中显示已删除的文件

-m --modified 在输出中显示已修改的文件


这个问题特别关注展示哪些文件将被添加,同时考虑到.gitignore。你的回答忽略了.gitignore。 - Freddie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接