From: Jeff King Date: Tue, 01 Sep 2026 04:39:44 GMT Subject: Re: [PATCH v2] builtin/ident: add new 'ident' command Message-ID: <20260901043944.GA1074757@coredump.intra.peff.net> In-Reply-To: On Mon, Aug 31, 2026 at 11:59:06PM +0000, Andrew Pleeter via GitGitGadget wrote: > While existing plumbing commands like 'git var' and 'git config' expose > individual pieces of identity and configuration, discovering what identity > and signing key will actually be attached to a new commit requires multiple > independent queries and manual correlation. 'git config' only reads raw > values without performing environment overrides or GECOS detection, while > 'git var' returns full ident strings with timestamps without exposing > commit signing status. This is just my gut reaction, but: would it be simpler to teach git var to provide those broken-down pieces than to introduce a whole new command? This works now: git var GIT_COMMITTER_IDENT but why not: git var GIT_COMMITTER_NAME git var GIT_COMMITTER_EMAIL git var GIT_COMMITTER_DATE Those are well-known names already; they're what we use for reading in the broken-down values from the environment. And likewise for GIT_AUTHOR_*. Let's see what else is in your feature list: > 'git ident' provides a unified command with additive, composable options: > - Identity scope selectors (-a / --author, -c / --committer) choose > which identities to format (defaulting to both when neither is specified). I think that works by switching between the two var families above. > - Component selectors (-n / --name, -e / --email) choose which parts > to format (defaulting to full 'Name ' when neither or both are > specified). We don't allow mix-and-match here (nor even multiple values!), so you'd have to do: ident="$(git var GIT_AUTHOR_NAME) <$(git var GIT_AUTHOR_EMAIL)" I think it would be reasonable for git-var to accept multiple values and output them one per line (or with NULs via "-z"). That doesn't really make things easier in shell, but it might help scripts in other languages. We _could_ go as far as providing a format language like we do in for-each-ref, etc, where we offer to shell-quote. And then you can do: eval "$(git var --shell-quote --format=' name=%(GIT_AUTHOR_NAME) email=%(GIT_AUTHOR_EMAIL) ')" but IMHO that is probably going too far. It sometimes lets you simplify shell use of the tool at the expense of a weird and complicated interface (I kind of which we didn't have it in for-each-ref). > - -v / --verbose prepends 'Author: ' or 'Committer: ' role labels. Seems like something that git-var might benefit from, too. > - -s / --signing-key resolves and outputs the commit signing key. Likewise, this feels like it should be a git-var entry. > - --porcelain produces machine-readable key-value pairs. > - -z / --null terminates output records with NUL bytes. Likewise. My main feeling on suggesting this is that: 1. We already have a lot of commands, and this one feels very specialized. 2. Most of these suggestions could make git-var better for reading idents _and_ for reading its other variables. -Peff