Skip to content

Commit

Permalink
[PATCH] Improved "git add"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Sep 18, 2005
1 parent a8783ee commit 37539fb
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion git-add.sh
@@ -1,2 +1,32 @@
#!/bin/sh
git-update-index --add -- "$@"

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

0 comments on commit 37539fb

Please sign in to comment.