How to get git-status of a single subfolder?
Solution 1:
git status .
will show the status of the current directory and subdirectories.
For instance, given files (numbers) in this tree:
a/1
a/2
b/3
b/4
b/c/5
b/c/6
from subdirectory "b", git status
shows new files in the whole tree:
% 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
#
but git status .
just shows files in "b" and below.
% 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
#
Just this subdirectory, not below
git status .
shows all files below "b" recursively. To show just the files in the "b" but not below, you need to pass a list of just the files (and not directories) to git status
. This is a bit fiddly, depending on your shell.
Zsh
In zsh you can select ordinary files with the "glob qualifier" (.)
. For example:
% 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
Bash doesn't have glob qualifiers but you can use GNU find
to select ordinary files and then pass them along to git status
like so:
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
This uses -maxdepth
which is a GNU find extension. POSIX find doesn't have -maxdepth
, but you can do this:
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
Solution 2:
It is possible to restrict git status
to the current directory (without child folders) by giving a pathspec using the magic word glob
and *:
:
git status ':(glob)*'