如何获得单个子文件夹的git-status?

时间:2009-06-25 15:01:31

标签: git

当我在我的存储库的子文件夹中执行git状态时,它还包括父文件夹的状态。

有没有办法将git-status限制在一个特定的文件夹中?

6 个答案:

答案 0 :(得分:86)

git status .

将显示当前目录和子目录的状态。

例如,此树中的给定文件(数字):

a/1
a/2
b/3
b/4
b/c/5
b/c/6

从子目录“b”,git status显示整个树中的新文件:

% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   ../a/1
#   new file:   ../a/2
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

git status .只显示“b”及以下的文件。

% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

只是这个子目录,而不是

git status .以递归方式显示“b”以下的所有文件。要仅显示“b”中的文件而不是下面的文件,您需要将文件(而不是目录)的列表传递给git status。这有点繁琐,取决于你的shell。

岩组

在zsh中,您可以使用“glob qualifier”(.)选择普通文件。例如:

% git status *(.)
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

Bash没有glob限定符,但你可以使用GNU find来选择普通文件,然后将它们传递给git status,如下所示:

bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

这使用-maxdepth,这是GNU find扩展名。 POSIX find没有-maxdepth,但您可以这样做:

bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

答案 1 :(得分:3)

某些管道命令会将目录作为参数:

git ls-files -t -o -m aDirectory

会为您提供所有已更改但未更新(未添加到舞台)或未跟踪的文件。那是一个目录。

this thread所述,git ls-files不支持“--added选项。

  

更根本的原因是因为ls-files管道是关于索引   关于索引和工作树之间的比较,添加 not   它位于HEAD提交和索引之间,它不属于ls-files管道。

所以,使用命令mentioned here

git diff-index --name-only -B -R -M -C HEAD src

会为您提供未添加和添加的文件

git diff-files --name-only -B -R -M -C src

只会为您提供未添加的文件。 (同时检测重写,重命名,复制......)

与管道命令一样,有些脚本按顺序排列;)

答案 2 :(得分:3)

不完美,但这也适用于你感兴趣的目录:

git status | grep -v ' \.\./'

这将隐藏所有需要在其相对路径中向上引用的目录。

如果您想让颜色从另一端吐出,请将color.status设为always

git config color.status always

答案 3 :(得分:2)

通过使用魔术词git statusglob给出路径说明,可以将*:限制为当前目录(没有子文件夹):

git status ':(glob)*'

答案 4 :(得分:1)

当我尝试使用git时,我没有办法做到这一点。

我最终做了:

x@x:~/x$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       b
#       main/a
nothing added to commit but untracked files present (use "git add" to track)

x@x:~/x$ git status | grep main
#       main/a

答案 5 :(得分:1)

cd YOUR_REQUIRED_DIRECTORY,然后,git status。