From: Windl, Ulrich Date: Tue, 03 Nov 2026 12:00:05 GMT Subject: RE: [EXT] Re: Q: .gitignore and asterisk "*" Message-ID: In-Reply-To: <20261103073317.DATcL%taahol@utu.fi> Hi! I think the original " matches anything except a slash." "kind of suggests" that is has to match "something" (non-zero length) to succeed, while the proposed "string of any length" would include zero-size for me. Still, the latest proposal is just as clear IMHO. Kind regards, Ulrich Windl Klinikum der Universität Regensburg IT / Infrastruktur Franz-Josef-Strauß-Allee 11 D-93053 Regensburg Tel: +49 941 944-13816 Softphone: +49 941 944-801142 FAX: +49 941 944-5882 > -----Original Message----- > From: Tuomas Ahola > Sent: Tuesday, November 3, 2026 8:33 AM > To: Junio C Hamano > Cc: Windl, Ulrich ; git@vger.kernel.org > Subject: [EXT] Re: Q: .gitignore and asterisk "*" > > Junio C Hamano wrote: > > > "Windl, Ulrich" writes: > > > > > I think the documentation for gitignore(5) could be improved regarding > "*": > > > It's nor clear whether "*" matches an empty string. > > > So when I have > > > foo.log > > > foo.msg > > > foo.sh > > > foo-whatever.log > > > foo-whetever.msg > > > Would e.g. "foo*.log" cover all the logs? > > > > > > The manual says: > > > • An asterisk "*" matches anything except a slash. The character "?" > > > matches any one character except "/". The range notation, e.g. > > > [a-zA-Z], can be used to match one of the characters in a range. > > > See fnmatch(3) and the FNM_PATHNAME flag for a more detailed > > > description. > > > > Very good point. > > > > The reference to fnmatch(3) may not make readers to consult the > > documentation for the library function. The system they are on may > > not even have "man". fnmatch(3) often refers to glob(7), which > > typically would say that a '*' (not between brackets) matches any > > string, including the empty string. The reference to FNM_PATHNAME > > we have there is an attempt to refer back to fnmatch(3) that would > > typically say that the wildcard does not match a slash. > > > > How about rewriting the entry like so to reduce external references? > > > > ----- >8 ----- > > Subject: gitignore: rewrite wildcard description > > > > The documentation for '.gitignore' makes reference to fnmatch(3) and > > FNM_PATHNAME to describe how an asterisk "*" and a question mark "?" > > behave. Even though it spells out that these wildcard characters > > do not match a slash, it does not say if an asterisk matches an > > empty string (it does). > > > > Rewrite the section so that the readers would get a more complete > > picture without requiring them to know what fnmatch(3) and glob(7) > > says. > > > > Signed-off-by: Junio C Hamano > > --- > > Documentation/gitignore.adoc | 15 ++++++++++----- > > 1 file changed, 10 insertions(+), 5 deletions(-) > > > > diff --git c/Documentation/gitignore.adoc > w/Documentation/gitignore.adoc > > index 7979e50f18..671a5a4c99 100644 > > --- c/Documentation/gitignore.adoc > > +++ w/Documentation/gitignore.adoc > > @@ -110,11 +110,16 @@ PATTERN FORMAT > > and `a/frotz` that is a directory (all paths are relative from > > the `.gitignore` file). > > > > - - An asterisk "`*`" matches anything except a slash. > > - The character "`?`" matches any one character except "`/`". > > - The range notation, e.g. `[a-zA-Z]`, can be used to match > > - one of the characters in a range. See fnmatch(3) and the > > - FNM_PATHNAME flag for a more detailed description. > > + - An asterisk "`*`" matches string of any length, and a question mark > > It's not unreasonable at all to call the empty string "a string of no length", > so it is still a bit ambiguous whether it qualifies as a string of any length. > I would suggest s/of any length/of length of zero or more/. > > > + "`?`" matches any single character, but these wildcard characters > > + do not match a slash "`/`". > > + > > + - A pair of brackets that enclose characters match one of the listed > > + characters, and a range notation inside them, e.g., "`[a-zA-Z]`", > > + would behave as if all the characters in the range were listed there > > + instead. Wildcard characters "`*`" and "`?`" lose their special > > + meaning inside a pair of brackets, e.g., "`[*]`" would match an > > + asterisk and nothing else. > > > > - A backslash ("`\`") can be used to escape any character. E.g., "`\*`" > > matches a literal asterisk (and "`\a`" matches "`a`", even though