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

当我在我的仓库的子文件夹中执行git status时,它也包括父文件夹的状态。

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

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 . 以recursion方式显示“b”下的所有文件。 为了只显示“b”中的文件,而不是下面的文件,你需要传递一个文件列表(而不是目录)到git status 。 这有点烦琐,取决于你的shell。

岩组

在zsh中,您可以select具有“glob限定符” (.)普通文件。 例如:

 % 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来select普通文件,然后将它们传递给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查找扩展。 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 

一些pipe道命令做一个目录作为参数:

 git ls-files -t -o -m aDirectory 

会给你所有的文件改变,但没有更新(不添加到阶段),或未跟踪。 而那个目录。

正如在这个线程中写的,git ls-files不支持“ --added选项。

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

所以,使用这里提到的命令:

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

会给你两个不添加和添加的文件

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

只会给你没有添加的文件。 (在检测重写,重命名,复制,…)

像通常的pipe道命令一样,一些脚本是按顺序的;)

不完美的,但是这也可以在你感兴趣的目录中工作:

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

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

如果你想从另一端得到颜色,把color.status设置为always

 git config color.status always 

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

我结束了:

 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 

cd YOUR_REQUIRED_DIRECTORY,然后,
git状态。