As mentioned in "git: How do I recursively add all files in a directory subtree that match a glob pattern?", if you properly escape or quote your pathspec globbing (like '*.java'
), then yes, git add '*.java'
Git 2.13 (Q2 2017) improves that for interactive add:
See commit 7288e12 (14 Mar 2017) by Jeff King (peff
).
(Merged by Junio C Hamano -- gitster
-- in commit 153e0d7, 17 Mar 2017)
add --interactive
: do not expand pathspecs with ls-files
When we want to get the list of modified files, we first expand any user-provided pathspecs with "ls-files
", and then feed the resulting list of paths as arguments to "diff-index
" and "diff-files
".
If your pathspec expands into a large number of paths, you may run into one of two problems:
The OS may complain about the size of the argument
list, and refuse to run. For example:
$ (ulimit -s 128 && git add -p drivers)
Can't exec "git": Argument list too long at .../git-add--interactive line 177.
Died at .../git-add--interactive line 177.
That's on the linux.git
repository, which has about 20K files in the "drivers" directory (none of them modified in this case). The "ulimit -s
" trick is necessary to show the problem on Linux even for such a gigantic set of paths.
Other operating systems have much smaller limits (e.g., a real-world case was seen with only 5K files on OS X).
Even when it does work, it's really slow. The pathspec
code is not optimized for huge numbers of paths. Here's
the same case without the ulimit:
$ time git add -p drivers
No changes.
real 0m16.559s
user 0m53.140s
sys 0m0.220s
We can improve this by skipping "ls-files
" completely, and just feeding the original pathspecs to the diff commands.
Historically the pathspec language supported by "diff-index
" was weaker, but that is no longer the case.
.java
files in your current directory, you may be running into the, er, complicated wildcard handling between bash and the msys command-line “helper”. I am not sure about a solution. You might try multiple layers of quotes:git add '"*.java"'
(the single quotes are taken by bash to prevent glob expansion, the double quotes are taken by the msys layer to prevent glob expansion). – Geologygit add *.java
works for me (on powershell with GitHub client) – Geraldgeraldagit add "*.java"
works for me in Ubuntu. – Chasten