"git add" using wildcard is not functioning as I hoped - must I cd into specific directories?
Put it around single quotes. This should work.
git add '*s.rb'
UPDATE
After more testing, I find out that I can even do git add *s.rb
without quotes. This might just work for me with my git version 1.7.10.4 (Mac OSX Lion, homebrew). My explanation is that if shell wildcards expansion doesn't match any file, it'd supply the original unexpanded argument '*s.rb' to git add
.
sh-3.2$ git status
#
# modified: config/routes.rb
# modified: spec/models/products_spec.rb
#
Now I do git add
without quotes.
sh-3.2$ git add *s.rb
Surprisingly it works!
sh-3.2$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: config/routes.rb
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: spec/models/products_spec.rb
#
If wildcard pattern doesn't match any file, git will give out this error.
sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files
I can't get recursive globs to work for me as my version of bash is too old. So what I do is
find . -name "*.rb" | xargs git add
Works a treat and I can add other filters there if I need - so if I want to add all but one file I can do this.
find . -name "*.rb" | grep -v "not_me.rb" | xargs git add
There's a couple of other cases that can be useful.
If you just want to add files that already exist in your repo you can
git add -u .
If you want to add every thing then
git add .
You can also try git's magic signature for matching a path via glob e.g.
git add ':(glob)**/*.ext'
see more here https://css-tricks.com/git-pathspecs-and-how-to-use-them/