git add * (asterisk) vs git add . (period)
I'm new to git and I have a question about adding files in git. I have found multiple stackoverflow questions about the difference between git add .
and git add -a
, git add --all
, git add -A
, etc. But I've been unable to find a place that explains what git add *
does. I've even looked at the git add man page, but it didn't help. I've been using it in place of git add .
and my co-worker asked me why. I didn't have an answer. I've just always used git add *
.
Are git add .
and git add *
the same? Does one add changed files from the current directory only, while the other adds files from the current directory and subdirectories (recursively)?
There's a great chart listed on one of the other stack questions that shows the difference between git add -A
git add .
and git add -u
, but it doesn't have git add *
.
Note: I understand what it means to use the asterisk as a wildcard (add all files with a given extension). For example, git add *.html
would add all files that have a .html
extension (but ignore .css
, .js
, etc).
Thanks for the help!
add *
means add all files in the current directory, except for files whose name begin with a dot. This is your shell functionality and Git only ever receives a list of files.
add .
has no special meaning in your shell, and thus Git adds the entire directory recursively, which is almost the same, but including files whose names begin with a dot.
*
is not part of git - it's a wildcard interpreted by the shell. *
expands to all the files in the current directory, and is only then passed to git, which add
s them all.
.
is the current directory itself, and git add
ing it will add it and the all the files under it.