From both my past experience and current Internet research, the . in Git commands such as git add . appears to be a pathspec which matches the current directory. However, I'm not seeing this defined in the official git documentation at git-scm.com.
The pathspec documentation says:
The pathspec syntax is as follows:
- any path matches itself
- the pathspec up to the last slash represents a directory prefix. The scope of that pathspec is limited to that subtree.
- the rest of the pathspec is a pattern for the remainder of the pathname. Paths relative to the directory prefix will be matched against that pattern using fnmatch(3); in particular, * and ? can match directory separators.
Following these rules tells me that . is probably matched by fnmatch(3). According to man7.org, fnmatch(3) checks whether the string argument matches the pattern argument, per glob(7):
The fnmatch() function checks whether the string argument matches the pattern argument, which is a shell wildcard pattern (see glob(7)).
The glob(7) documentation defines a number of special wildcard characters, but does not seem to have any special support for ..
A string is a wildcard pattern if it contains one of the characters '?', '*', or '['.
What am I missing here? Why does . match all files in the current directory, and where is this documented?
. is a file system entry in Unix-like operating systems and Windows (plus various other operating systems) which refers to the current working directory.
Since . is a path to the current working directory according to the file system, the first pathspec syntax rule ("any path matches itself") causes it to have the exact same meaning in Git.