on 10/25/2007 11:55 AM Johannes Schindelin said the following: > I am not so sure. In other SCMs, "git status" may be a way to do "git > diff --name-only" or "git ls-files", but not in git. Here, it strictly > means "what would be happening if I were to commit _right_ _now_?". I somehow agree with your argument, but then again, sometimes I'm still interested in *only* the status for a given directory. IMHO, answering the question "what would be happening if...?" should be git-commit's task (e.g. git-commit --dry-run). And git-status should behave similar to git-log and git-diff. For those interested: I have attached a little script that mimics current git-status (except the "dry-run" stuff) but also can take a list of directories/files.
#!/bin/sh USAGE='[--staged] [--changed] [--untracked]' SUBDIRECTORY_OK=1 . git-sh-setup require_work_tree print_stat_line() { case "$1" in M) echo "# modified: $2";; A) echo "# new file: $2";; R*) echo "# renamed: $2 -> $3";; D) echo "# deleted: $2";; U) echo "# unmerged: $2";; X) echo "# $2";; *) echo "# [$S]: $2";; esac } STAGED= CHANGED= UNTRACKED= HP= while test $# != 0 do case "$1" in -s|--staged) STAGED=1; shift;; -c|--changed) CHANGED=1; shift;; -u|--untracked) UNTRACKED=1; shift;; --) shift; break;; -*) usage;; *) break;; esac done if BRANCH_NAME=$(git symbolic-ref -q HEAD) then BRANCH_NAME="On branch $(expr "z$BRANCH_NAME" : 'zrefs/heads/\(.*\)')" else BRANCH_NAME="Not currently on any branch" fi [ "$#" = 0 ] && cd_to_toplevel if [ -z "$STAGED$CHANGED$UNTRACKED" ]; then STAGED=1; CHANGED=1; UNTRACKED=1 fi SP=$(echo _/$(git rev-parse --show-cdup)|tr '/' ' '|wc -w) echo "# $BRANCH_NAME" # Changes to be commited [ "$STAGED" ] && git-diff --name-status --cached -M -- "$@"|while read S F R do if [ -z "$HP" ]; then echo '# Changes to be committed:' echo '# (use "git reset HEAD <file>..." to unstage)' echo '#' HP=1 fi F=$(echo $F|cut -d'/' -f$SP-) print_stat_line "$S" "$F" "$R" done # Changed but not updated [ "$CHANGED" ] && git-diff --name-status -- "$@"|while read S F do if [ -z "$HP" ]; then echo '#' echo '# Changed but not updated:' echo '# (use "git add <file>..." to update what will be committed)' echo '#' HP=1 fi F=$(echo $F|cut -d'/' -f$SP-) print_stat_line "$S" "$F" done # Untracked files [ "$UNTRACKED" ] && git-ls-files --exclude-per-directory=.gitignore -o --directory -- "$@"|while read F do if [ -z "$HP" ]; then echo '#' echo '# Untracked files:' echo '# (use "git add <file>..." to include in what will be committed)' echo '#' HP=1 fi print_stat_line "X" "$F" done