git/list[1] front-page[2] threads[3] people[4] search[5] about
 

RE: [EXT] Re: Q: .gitignore and asterisk "*"

From
WUWindl, Ulrich <u.windl@ukr.de>
Date
Nov 3, 2026, 12:00 UTC
Message-ID
<ea470151c8c6448caec64f26c3d35498@ukr.de>
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
Show 91 quoted lines
> -----Original Message-----
> From: Tuomas Ahola <taahol@utu.fi>
> Sent: Tuesday, November 3, 2026 8:33 AM
> To: Junio C Hamano <gitster@pobox.com>
> Cc: Windl, Ulrich <u.windl@ukr.de>; git@vger.kernel.org
> Subject: [EXT] Re: Q: .gitignore and asterisk "*"
> 
> Junio C Hamano <gitster@pobox.com> wrote:
> 
> > "Windl, Ulrich" <u.windl@ukr.de> 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 <gitster@pobox.com>
> > ---
> >  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
Previous: Tuomas AholaNext: Junio C Hamano
Message 4 of 7 in “Q: .gitignore and asterisk "*"”
  1. Windl, UlrichOct 30, 2026
  2. Junio C HamanoOct 30, 2026
  3. Tuomas AholaNov 3, 2026
  4. Windl, UlrichNov 3, 2026
  5. Junio C HamanoNov 3, 2026
  6. Tuomas AholaNov 3, 2026
  7. gitignore: rewrite wildcard descriptionJunio C Hamano, Nov 3, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.