Git development
 help / color / mirror / Atom feed
From: Tuomas Ahola <taahol@utu.fi>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Windl, Ulrich" <u.windl@ukr.de>,
	"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Q: .gitignore and asterisk "*"
Date: Tue, 3 Nov 2026 09:33:17 +0200	[thread overview]
Message-ID: <20261103073317.DATcL%taahol@utu.fi> (raw)
In-Reply-To: <xmqq5wyjxgyn.fsf@gitster.g>

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

  reply	other threads:[~2026-11-03  7:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-30 10:46 Q: .gitignore and asterisk "*" Windl, Ulrich
2026-10-30 16:59 ` Junio C Hamano
2026-11-03  7:33   ` Tuomas Ahola [this message]
2026-11-03 12:00     ` [EXT] " Windl, Ulrich
2026-11-03 17:13     ` Junio C Hamano
2026-11-03 17:29       ` Tuomas Ahola

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261103073317.DATcL%taahol@utu.fi \
    --to=taahol@utu.fi \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=u.windl@ukr.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox