git/git-add.sh
Linus Torvalds 37539fbda5 [PATCH] Improved "git add"
This fixes everybodys favourite complaint about "git add", namely that it
doesn't take directories.

We use "git-ls-files --others" to generate an arbitrary list of filenames,
and thus also automatically honor ignore-files while we're at it.

Side note: there's a lot of room for improvement here. In particular, if
we have a long list of filenames (importing a big archive), this will just
do a big stupid for-loop and add them one at a time. Maybe it should use

	generate-list | xargs -0 git-update-idex --add --

instead.

Also, I think we should have a default ignore list if we don't find a
.git/info/exclude file. Ignoring "*.o" and ".*" by default would probably
be the right thing to do.

But I think this is a good first step.

Use the "-n" flag to just show the list of files to be added without
adding them.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-18 14:18:38 -07:00

33 lines
524 B
Bash
Executable File

#!/bin/sh
show_only=
verbose=
while : ; do
case "$1" in
-n)
show_only=true
verbose=true
;;
-v)
verbose=true
;;
*)
break
;;
esac
shift
done
GIT_DIR=$(git-rev-parse --git-dir) || exit
global_exclude=
if [ -f "$GIT_DIR/info/exclude" ]; then
global_exclude="--exclude-from=$GIT_DIR/info/exclude"
fi
for i in $(git-ls-files --others \
$global_exclude --exclude-per-directory=.gitignore \
"$@")
do
[ "$verbose" ] && echo " $i"
[ "$show_only" ] || git-update-index --add -- "$i" || exit
done