I would like to see the status of the current directory. Because there are lots of changes in sub-directories, which I do not want to see, the following command doesn\'
git-status -- ...
The synopsis of the git-status man page tells you that you can filter by paths:
git status [...] [--] [...]
Therefore, all you have to do is get a list of paths corresponding to the regular (non-directory) files in the current directory, and pass that to git-status
.
There is one gotcha: because git status
reports about the whole repository if passed an empty
argument, you need to check whether the list is empty or not.
Here is a small shell script that does what you want.
#!/bin/sh
# git-status-dot
#
# Show the status of non-directory files (if any) in the working directory
#
# To make a Git alias called 'status-dot' out of this script,
# put the latter on your search path, make it executable, and run
#
# git config --global alias.status-dot '! git-status-dot'
# Because GIt aliases are run from the top-level directory of the repo,
# we need to change directory back to $GIT_PREFIX.
[ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX"
# List Non-Directory Files in the Current Directory
lsnondirdot=$(ls -ap | grep -v /)
# If "lsnondirdot" is not empty, pass its value to "git status".
if [ -n "$lsnondirdot" ]
then
git status -- $lsnondirdot
else
printf "No non-directory files in the working directory\n"
fi
exit $?
For more details about why the GIT_PREFIX
shenanigans are required, see git aliases operate in the wrong directory.
The script is available at Jubobs/git-aliases on GitHub.
For convenience, you can create a Git alias that calls the script; make sure the script is on your path, though.
git config --global alias.statusdot '!sh git-status-dot.sh'
Here is a toy example demonstrating how to use the resulting alias and what it does.
# initialize a repo
$ mkdir testgit
$ cd testgit
$ git init
# create two files
$ mkdir foo
$ touch foo/foo.txt
$ touch bar.txt
# good old git status reports that subdir/test1.txt is untracked...
$ git status
On branch master
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
bar.txt
foo/
nothing added to commit but untracked files present (use "git add" to track)
# ... whereas our new alias, git status-dot, only cares
# about regular files in the current directory
$ git status-dot
On branch master
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
bar.txt
nothing added to commit but untracked files present (use "git add" to track)
# and if we delete README.md ...
$ rm README.md
# ... good old git status still bother us about /subdir ...
$ git status
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
foo/
nothing added to commit but untracked files present (use "git add" to track)
# ... whereas git statusdot doesn't
$ git status-dot
No non-directory files in the working directory
$