From: Hendrik Jaeger <ml_git@henk.geekmail.org>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org
Subject: Re: git config: unintuitive behaviour with --global and --no-includes
Date: Tue, 21 Jul 2026 13:53:17 +0200 [thread overview]
Message-ID: <20260721135317.4802ef2d@frustcomp.hnjs.home.arpa> (raw)
In-Reply-To: <20260720125145.GA5100@coredump.intra.peff.net>
[-- Attachment #1: Type: text/plain, Size: 3984 bytes --]
Hi Jeff
Thanks for your email!
> As for the rationale, it is a mix of backwards compatibility and least-surprise.
To be honest, this reminds me of the XKCD comic with the title "workflow": https://xkcd.com/1172/
The behaviour may be “least-surprise” for the initiated. For everyone new to this, I’d expect it to be as “most-surprising” as it was for me.
Best regards
henk
On Mon, 20 Jul 2026 08:51:45 -0400
Jeff King <peff@peff.net> wrote:
> On Mon, Jul 20, 2026 at 11:34:02AM +0200, Hendrik Jaeger wrote:
>
> > The manpage says:
> > > Respect include.* directives in config files when looking up
> > > values. Defaults to off when a specific file is given (e.g., using
> > > --file, --global, etc) and on when searching all config files.
> >
> > IMHO it makes sense the way it is phrased “when a specific file is
> > given” but then seems to turn into non-sense when --global is given as
> > an example. Giving --global is not “giving a specific file” but
> > “restricting to a specific scope”, which may `include` other files.
> > The results seem inconsistent and counterintuitive to me.
> >
> > Am I misunderstanding anything here?
> > Is this behaviour intended?
> > If it is intended, can someone please explain the rationale behind it? I don’t get it, it seems wrong to me.
>
> The behavior you're seeing is intended. Regarding "a specific scope", I
> don't think that's an unreasonable way to think about it. But it's not
> how Git thinks about it, and in particular back when --include was added
> and this behavior was set, "--global" was literally a synonym for
> "--file=$HOME/.gitconfig".
>
> As for the rationale, it is a mix of backwards compatibility and
> least-surprise. The include functionality was tacked on to the existing
> config parser, and we did not want to surprise anybody who asked for a
> specific file by showing them results for another file. This is
> especially important for reading untrusted input like .gitmodules, but
> also for writing.
>
> > Regarding the initial issue: I just added --includes to the call in
> > lbmk and it works just fine, so there is no need to address this. I
> > only mentioned it for context to how I got to looking into this
> > behaviour.
>
> IMHO lbmk is wrong to be using "--global" in the first place. Looking at
> the source, it is trying to check whether the user has set up their
> identity. But it is not lbmk's business whether you did it in the
> --global config file, or elsewhere! So it should probably just use a
> straight "git config user.name", which will do the same resolution that
> Git will do internally.
>
> The "--global" was added in their 4a280c62 (.gitcheck: re-write
> entirely. force global config., 2023-08-27), but I don't see any
> rationale given.
>
> Depending on what they are trying to check, it might be even better
> still for it to use "git var GIT_AUTHOR_IDENT". That will give the
> actual ident Git will derive, including things like checking $EMAIL in
> the environment and so on.
>
> So if the intent is "will Git come up with some ident", then that is the
> most accurate way to check it. But if the intent is "did the user
> specifically configure Git (because we are worried that values derived
> from GECOS and $EMAIL might not be accurate)", then checking user.*
> specifically is closer to that.
>
> Though note there is one other hitch, which is that the user can set
> author.* and committer.* as specific variables, since 39ab4d0951
> (config: allow giving separate author and committer idents, 2019-02-04).
> I suspect not many people do that, but that would also be something that
> a config-specific check would have to handle (but "git var" would do
> automatically).
>
> So I think you might consider sending a bug report to lbmk. Feel free to
> point at this thread, and I'm happy to discuss further with them.
>
> -Peff
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
prev parent reply other threads:[~2026-07-21 11:53 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 9:34 git config: unintuitive behaviour with --global and --no-includes Hendrik Jaeger
2026-07-20 12:25 ` Ben Knoble
2026-07-20 12:51 ` Jeff King
2026-07-20 17:09 ` Junio C Hamano
2026-07-21 11:53 ` Hendrik Jaeger [this message]
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=20260721135317.4802ef2d@frustcomp.hnjs.home.arpa \
--to=ml_git@henk.geekmail.org \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/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