From: "Andrew Pleeter via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Andrew Pleeter <andrewpleeter@gmail.com>,
anpl1623 <andrewpleeter@gmail.com>
Subject: [PATCH] builtin/whoami: add new 'whoami' command
Date: Tue, 25 Aug 2026 20:46:42 +0000 [thread overview]
Message-ID: <pull.2388.git.git.1787690802942.gitgitgadget@gmail.com> (raw)
From: anpl1623 <andrewpleeter@gmail.com>
Add a builtin 'whoami' command to inspect and display the resolved
author and committer identity along with the commit signing
configuration (GPG/SSH key ID and commit.gpgsign status) used when
creating Git commits.
Support optional flags (--author, --committer, --name, --email,
--signing-key, and --verbose) for targeted querying and scripting.
Include documentation in Documentation/git-whoami.adoc and regression
tests in t/t0015-whoami.sh.
Signed-off-by: anpl1623 <andrewpleeter@gmail.com>
---
builtin/whoami: add new 'whoami' command
Title:
======
builtin/whoami: add new 'whoami' command
------------------------------------------------------------------------
Description:
============
SUMMARY
Adds a new builtin git whoami command that inspects and displays the
user's active author and committer identity along with their commit
signing configuration (GPG/SSH key ID and commit.gpgsign status).
MOTIVATION
Users often work across multiple environments, profiles, or repositories
with different global/local configs and signing keys. Currently,
verifying what identity and signing key will be attached to a new commit
requires checking several individual git config and git var settings.
git whoami provides a simple, direct porcelain command to verify this in
one step.
CHANGES
* Core implementation: Added builtin/whoami.c using Git's ident.h and
gpg-interface.h APIs.
* CLI flags supported:
* git whoami (default overview)
* -a, --author (author identity: Name <email>)
* -c, --committer (committer identity: Name <email>)
* -n, --name (name only)
* -e, --email (email only)
* -s, --signing-key (signing key ID)
* -v, --verbose (detailed identity and signing breakdown)
* Documentation: Added manpage in Documentation/git-whoami.adoc.
* Build integration: Added to Makefile, meson.build, command-list.txt,
and builtin.h.
* Test suite: Added comprehensive automated tests in t/t0015-whoami.sh.
EXAMPLE OUTPUT
$ git whoami
Author: Jane Doe <jane@example.com>
Committer: Jane Doe <jane@example.com>
Signing: /Users/jane/.ssh/id_ed25519_git (format: ssh, commit.gpgsign: true)
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2388%2Fanpl1623%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2388/anpl1623/master-v1
Pull-Request: https://github.com/git/git/pull/2388
Documentation/git-whoami.adoc | 48 ++++++++
Documentation/meson.build | 1 +
Makefile | 1 +
builtin.h | 1 +
builtin/whoami.c | 201 ++++++++++++++++++++++++++++++++++
command-list.txt | 1 +
git.c | 1 +
meson.build | 1 +
t/meson.build | 1 +
t/t0015-whoami.sh | 181 ++++++++++++++++++++++++++++++
10 files changed, 437 insertions(+)
create mode 100644 Documentation/git-whoami.adoc
create mode 100644 builtin/whoami.c
create mode 100755 t/t0015-whoami.sh
diff --git a/Documentation/git-whoami.adoc b/Documentation/git-whoami.adoc
new file mode 100644
index 0000000000..80670f10e9
--- /dev/null
+++ b/Documentation/git-whoami.adoc
@@ -0,0 +1,48 @@
+git-whoami(1)
+=============
+
+NAME
+----
+git-whoami - Show current user identity and commit signing information
+
+
+SYNOPSIS
+--------
+[synopsis]
+git whoami [options]
+
+DESCRIPTION
+-----------
+Displays the author and committer identity (name and email address) and
+commit signing configuration that will be used when signing and recording
+Git commits.
+
+OPTIONS
+-------
+`-a`::
+`--author`::
+ Show author identity.
+
+`-c`::
+`--committer`::
+ Show committer identity.
+
+`-n`::
+`--name`::
+ Show name only.
+
+`-e`::
+`--email`::
+ Show email only.
+
+`-s`::
+`--signing-key`::
+ Show commit signing key only.
+
+`-v`::
+`--verbose`::
+ Show detailed identity and signing status.
+
+GIT
+---
+Part of the linkgit:git[1] suite
diff --git a/Documentation/meson.build b/Documentation/meson.build
index f4854f802d..3476e41f29 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -163,6 +163,7 @@ manpages = {
'git-verify-tag.adoc' : 1,
'git-version.adoc' : 1,
'git-web--browse.adoc' : 1,
+ 'git-whoami.adoc' : 1,
'git-worktree.adoc' : 1,
'git-write-tree.adoc' : 1,
'git.adoc' : 1,
diff --git a/Makefile b/Makefile
index d4b775953d..3af620d73d 100644
--- a/Makefile
+++ b/Makefile
@@ -1517,6 +1517,7 @@ BUILTIN_OBJS += builtin/var.o
BUILTIN_OBJS += builtin/verify-commit.o
BUILTIN_OBJS += builtin/verify-pack.o
BUILTIN_OBJS += builtin/verify-tag.o
+BUILTIN_OBJS += builtin/whoami.o
BUILTIN_OBJS += builtin/worktree.o
BUILTIN_OBJS += builtin/write-tree.o
diff --git a/builtin.h b/builtin.h
index 4e47a4ebd3..9e38298274 100644
--- a/builtin.h
+++ b/builtin.h
@@ -284,5 +284,6 @@ int cmd_verify_pack(int argc, const char **argv, const char *prefix, struct repo
int cmd_show_ref(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_pack_refs(int argc, const char **argv, const char *prefix, struct repository *repo);
int cmd_replace(int argc, const char **argv, const char *prefix, struct repository *repo);
+int cmd_whoami(int argc, const char **argv, const char *prefix, struct repository *repo);
#endif
diff --git a/builtin/whoami.c b/builtin/whoami.c
new file mode 100644
index 0000000000..3830f76c93
--- /dev/null
+++ b/builtin/whoami.c
@@ -0,0 +1,201 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
+#include "builtin.h"
+#include "config.h"
+#include "gettext.h"
+#include "gpg-interface.h"
+#include "ident.h"
+#include "parse-options.h"
+#include "strbuf.h"
+
+static const char * const whoami_usage[] = {
+ N_("git whoami [options]"),
+ NULL
+};
+
+int cmd_whoami(int argc,
+ const char **argv,
+ const char *prefix,
+ struct repository *repo UNUSED)
+{
+ int show_author = 0;
+ int show_committer = 0;
+ int show_name = 0;
+ int show_email = 0;
+ int show_signing_key = 0;
+ int verbose = 0;
+ int ret = 0;
+
+ struct option whoami_options[] = {
+ OPT_BOOL('a', "author", &show_author, N_("show author identity")),
+ OPT_BOOL('c', "committer", &show_committer, N_("show committer identity")),
+ OPT_BOOL('n', "name", &show_name, N_("show name only")),
+ OPT_BOOL('e', "email", &show_email, N_("show email only")),
+ OPT_BOOL('s', "signing-key", &show_signing_key, N_("show commit signing key")),
+ OPT__VERBOSE(&verbose, N_("show detailed identity and signing status")),
+ OPT_END()
+ };
+
+ struct strbuf author_info = STRBUF_INIT;
+ struct strbuf committer_info = STRBUF_INIT;
+ struct ident_split author_split, committer_split;
+ struct strbuf author_name = STRBUF_INIT;
+ struct strbuf author_email = STRBUF_INIT;
+ struct strbuf committer_name = STRBUF_INIT;
+ struct strbuf committer_email = STRBUF_INIT;
+
+ char *signing_key = NULL;
+ char *gpg_format = NULL;
+ char *ssh_default_key_cmd = NULL;
+ char *resolved_key = NULL;
+ int gpgsign = 0;
+ int is_ssh = 0;
+
+ argc = parse_options(argc, argv, prefix, whoami_options,
+ whoami_usage, 0);
+
+ if (argc > 0)
+ usage_with_options(whoami_usage, whoami_options);
+
+ die_for_incompatible_opt2(show_author, "--author", show_committer, "--committer");
+ die_for_incompatible_opt2(show_name, "--name", show_email, "--email");
+ die_for_incompatible_opt2(show_signing_key, "--signing-key", show_name, "--name");
+ die_for_incompatible_opt2(show_signing_key, "--signing-key", show_email, "--email");
+ die_for_incompatible_opt2(show_signing_key, "--signing-key", show_author, "--author");
+ die_for_incompatible_opt2(show_signing_key, "--signing-key", show_committer, "--committer");
+ die_for_incompatible_opt2(show_signing_key, "--signing-key", verbose, "--verbose");
+ die_for_incompatible_opt2(verbose, "--verbose", show_name, "--name");
+ die_for_incompatible_opt2(verbose, "--verbose", show_email, "--email");
+ die_for_incompatible_opt2(verbose, "--verbose", show_author, "--author");
+ die_for_incompatible_opt2(verbose, "--verbose", show_committer, "--committer");
+
+ repo_config(the_repository, git_default_config, NULL);
+
+ strbuf_addstr(&author_info, git_author_info(IDENT_NO_DATE));
+ strbuf_addstr(&committer_info, git_committer_info(IDENT_NO_DATE));
+
+ if (split_ident_line(&author_split, author_info.buf, author_info.len) == 0) {
+ if (author_split.name_begin && author_split.name_end)
+ strbuf_add(&author_name, author_split.name_begin,
+ author_split.name_end - author_split.name_begin);
+ if (author_split.mail_begin && author_split.mail_end)
+ strbuf_add(&author_email, author_split.mail_begin,
+ author_split.mail_end - author_split.mail_begin);
+ }
+
+ if (split_ident_line(&committer_split, committer_info.buf, committer_info.len) == 0) {
+ if (committer_split.name_begin && committer_split.name_end)
+ strbuf_add(&committer_name, committer_split.name_begin,
+ committer_split.name_end - committer_split.name_begin);
+ if (committer_split.mail_begin && committer_split.mail_end)
+ strbuf_add(&committer_email, committer_split.mail_begin,
+ committer_split.mail_end - committer_split.mail_begin);
+ }
+
+ repo_config_get_bool(the_repository, "commit.gpgsign", &gpgsign);
+ repo_config_get_string(the_repository, "user.signingkey", &signing_key);
+ repo_config_get_string(the_repository, "gpg.format", &gpg_format);
+ repo_config_get_string(the_repository, "gpg.ssh.defaultkeycommand", &ssh_default_key_cmd);
+
+ is_ssh = gpg_format && !strcmp(gpg_format, "ssh");
+
+ if (signing_key && *signing_key) {
+ resolved_key = xstrdup(signing_key);
+ } else if (is_ssh) {
+ if (ssh_default_key_cmd && *ssh_default_key_cmd)
+ resolved_key = get_signing_key_id();
+ } else if (gpgsign) {
+ resolved_key = get_signing_key_id();
+ }
+
+ if (show_signing_key) {
+ if (resolved_key && *resolved_key) {
+ puts(resolved_key);
+ ret = 0;
+ } else {
+ ret = 1;
+ }
+ goto cleanup;
+ }
+
+ if (show_name) {
+ if (show_author)
+ puts(author_name.buf);
+ else
+ puts(committer_name.buf);
+ goto cleanup;
+ }
+
+ if (show_email) {
+ if (show_author)
+ puts(author_email.buf);
+ else
+ puts(committer_email.buf);
+ goto cleanup;
+ }
+
+ if (show_author) {
+ puts(author_info.buf);
+ goto cleanup;
+ }
+
+ if (show_committer) {
+ puts(committer_info.buf);
+ goto cleanup;
+ }
+
+ if (verbose) {
+ printf(_("Author Name: %s\n"), author_name.buf);
+ printf(_("Author Email: %s\n"), author_email.buf);
+ printf(_("Committer Name: %s\n"), committer_name.buf);
+ printf(_("Committer Email: %s\n"), committer_email.buf);
+ if (signing_key && *signing_key)
+ printf(_("Signing Key: %s\n"), signing_key);
+ else if (resolved_key && *resolved_key)
+ printf(_("Signing Key: %s (default fallback)\n"), resolved_key);
+ else
+ printf(_("Signing Key: %s\n"), _("none"));
+ printf(_("Signing Format: %s\n"),
+ gpg_format ? gpg_format : "openpgp");
+ printf(_("GPG Signing: %s\n"),
+ gpgsign ? _("enabled") : _("disabled"));
+ } else {
+ printf(_("Author: %s\n"), author_info.buf);
+ printf(_("Committer: %s\n"), committer_info.buf);
+ if (gpgsign) {
+ if (signing_key && *signing_key) {
+ printf(_("Signing: %s (format: %s, commit.gpgsign: true)\n"),
+ signing_key,
+ gpg_format ? gpg_format : "openpgp");
+ } else if (resolved_key && *resolved_key) {
+ printf(_("Signing: default key (%s) (format: %s, commit.gpgsign: true)\n"),
+ resolved_key,
+ gpg_format ? gpg_format : "openpgp");
+ } else {
+ printf(_("Signing: enabled (no signing key configured)\n"));
+ }
+ } else {
+ if (signing_key && *signing_key) {
+ printf(_("Signing: disabled (key: %s, format: %s, commit.gpgsign: false)\n"),
+ signing_key,
+ gpg_format ? gpg_format : "openpgp");
+ } else {
+ printf(_("Signing: disabled (commit.gpgsign: false)\n"));
+ }
+ }
+ }
+
+cleanup:
+ free(signing_key);
+ free(gpg_format);
+ free(ssh_default_key_cmd);
+ free(resolved_key);
+ strbuf_release(&author_info);
+ strbuf_release(&committer_info);
+ strbuf_release(&author_name);
+ strbuf_release(&author_email);
+ strbuf_release(&committer_name);
+ strbuf_release(&committer_email);
+
+ return ret;
+}
diff --git a/command-list.txt b/command-list.txt
index 21b802c420..0276bc2a53 100644
--- a/command-list.txt
+++ b/command-list.txt
@@ -210,6 +210,7 @@ git-verify-pack plumbinginterrogators
git-verify-tag ancillaryinterrogators
git-version ancillaryinterrogators
git-whatchanged ancillaryinterrogators complete
+git-whoami ancillaryinterrogators
git-worktree mainporcelain
git-write-tree plumbingmanipulators
gitattributes userinterfaces
diff --git a/git.c b/git.c
index e5f1811b6b..83629178c9 100644
--- a/git.c
+++ b/git.c
@@ -680,6 +680,7 @@ static struct cmd_struct commands[] = {
#ifndef WITH_BREAKING_CHANGES
{ "whatchanged", cmd_whatchanged, RUN_SETUP | DEPRECATED },
#endif
+ { "whoami", cmd_whoami, RUN_SETUP_GENTLY },
{ "worktree", cmd_worktree, RUN_SETUP },
{ "write-tree", cmd_write_tree, RUN_SETUP },
};
diff --git a/meson.build b/meson.build
index d86f2acd2b..0daf395752 100644
--- a/meson.build
+++ b/meson.build
@@ -726,6 +726,7 @@ builtin_sources = [
'builtin/verify-commit.c',
'builtin/verify-pack.c',
'builtin/verify-tag.c',
+ 'builtin/whoami.c',
'builtin/worktree.c',
'builtin/write-tree.c',
]
diff --git a/t/meson.build b/t/meson.build
index 181d61a8a0..8c111148da 100644
--- a/t/meson.build
+++ b/t/meson.build
@@ -87,6 +87,7 @@ integration_tests = [
't0012-help.sh',
't0013-sha1dc.sh',
't0014-alias.sh',
+ 't0015-whoami.sh',
't0017-env-helper.sh',
't0018-advice.sh',
't0019-json-writer.sh',
diff --git a/t/t0015-whoami.sh b/t/t0015-whoami.sh
new file mode 100755
index 0000000000..2a2d9b6dd3
--- /dev/null
+++ b/t/t0015-whoami.sh
@@ -0,0 +1,181 @@
+#!/bin/sh
+
+test_description='basic sanity checks for git whoami'
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY/lib-gpg.sh"
+
+test_expect_success 'default output format without signing' '
+ cat >expect <<-EOF &&
+ Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+ Committer: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ Signing: disabled (commit.gpgsign: false)
+ EOF
+ git whoami >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git whoami --author' '
+ echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" >expect &&
+ git whoami --author >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git whoami --committer' '
+ echo "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expect &&
+ git whoami --committer >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git whoami --author --name and --author --email' '
+ echo "$GIT_AUTHOR_NAME" >expect_name &&
+ git whoami --author --name >actual_name &&
+ test_cmp expect_name actual_name &&
+ echo "$GIT_AUTHOR_EMAIL" >expect_email &&
+ git whoami --author --email >actual_email &&
+ test_cmp expect_email actual_email
+'
+
+test_expect_success 'git whoami --committer --name and --committer --email' '
+ echo "$GIT_COMMITTER_NAME" >expect_name &&
+ git whoami --committer --name >actual_name &&
+ test_cmp expect_name actual_name &&
+ echo "$GIT_COMMITTER_EMAIL" >expect_email &&
+ git whoami --committer --email >actual_email &&
+ test_cmp expect_email actual_email
+'
+
+test_expect_success 'git whoami --signing-key when signing is disabled and unset' '
+ test_config commit.gpgsign false &&
+ test_unconfig user.signingkey &&
+ test_must_fail git whoami --signing-key
+'
+
+test_expect_success 'git whoami with explicitly configured signing key' '
+ test_config user.signingkey "TEST_KEY_123" &&
+ test_config commit.gpgsign true &&
+ test_config gpg.format ssh &&
+ cat >expect <<-EOF &&
+ Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+ Committer: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ Signing: TEST_KEY_123 (format: ssh, commit.gpgsign: true)
+ EOF
+ git whoami >actual &&
+ test_cmp expect actual &&
+ echo "TEST_KEY_123" >expect_key &&
+ git whoami --signing-key >actual_key &&
+ test_cmp expect_key actual_key
+'
+
+test_expect_success 'git whoami with signing disabled but key configured' '
+ test_config user.signingkey "TEST_KEY_123" &&
+ test_config commit.gpgsign false &&
+ test_config gpg.format openpgp &&
+ cat >expect <<-EOF &&
+ Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+ Committer: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ Signing: disabled (key: TEST_KEY_123, format: openpgp, commit.gpgsign: false)
+ EOF
+ git whoami >actual &&
+ test_cmp expect actual &&
+ echo "TEST_KEY_123" >expect_key &&
+ git whoami --signing-key >actual_key &&
+ test_cmp expect_key actual_key
+'
+
+test_expect_success 'git whoami with openpgp signing enabled without explicit key' '
+ test_unconfig user.signingkey &&
+ test_config commit.gpgsign true &&
+ test_config gpg.format openpgp &&
+ cat >expect <<-EOF &&
+ Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+ Committer: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ Signing: default key ($GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>) (format: openpgp, commit.gpgsign: true)
+ EOF
+ git whoami >actual &&
+ test_cmp expect actual &&
+ echo "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expect_key &&
+ git whoami --signing-key >actual_key &&
+ test_cmp expect_key actual_key
+'
+
+test_expect_success 'git whoami with ssh signing enabled without explicit key' '
+ test_unconfig user.signingkey &&
+ test_config commit.gpgsign true &&
+ test_config gpg.format ssh &&
+ test_unconfig gpg.ssh.defaultKeyCommand &&
+ cat >expect <<-EOF &&
+ Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>
+ Committer: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
+ Signing: enabled (no signing key configured)
+ EOF
+ git whoami >actual &&
+ test_cmp expect actual &&
+ test_must_fail git whoami --signing-key
+'
+
+test_expect_success GPGSSH 'git whoami with ssh defaultKeyCommand' '
+ test_unconfig user.signingkey &&
+ test_config commit.gpgsign true &&
+ test_config gpg.format ssh &&
+ test_config gpg.ssh.defaultKeyCommand "cat \"${GPGSSH_KEY_PRIMARY}.pub\"" &&
+ git whoami --signing-key >actual_key &&
+ test_grep "^SHA256:" actual_key
+'
+
+test_expect_success 'git whoami -v / --verbose' '
+ test_config user.signingkey "MY_SIGNING_KEY" &&
+ test_config commit.gpgsign true &&
+ test_config gpg.format openpgp &&
+ cat >expect <<-EOF &&
+ Author Name: $GIT_AUTHOR_NAME
+ Author Email: $GIT_AUTHOR_EMAIL
+ Committer Name: $GIT_COMMITTER_NAME
+ Committer Email: $GIT_COMMITTER_EMAIL
+ Signing Key: MY_SIGNING_KEY
+ Signing Format: openpgp
+ GPG Signing: enabled
+ EOF
+ git whoami -v >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'git whoami with environment variable overrides' '
+ test_unconfig user.signingkey &&
+ test_config commit.gpgsign false &&
+ cat >expect <<-EOF &&
+ Author: Custom Author <custom.author@example.com>
+ Committer: Custom Committer <custom.committer@example.com>
+ Signing: disabled (commit.gpgsign: false)
+ EOF
+ GIT_AUTHOR_NAME="Custom Author" \
+ GIT_AUTHOR_EMAIL="custom.author@example.com" \
+ GIT_COMMITTER_NAME="Custom Committer" \
+ GIT_COMMITTER_EMAIL="custom.committer@example.com" \
+ git whoami >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'incompatible option combinations fail' '
+ test_must_fail git whoami --author --committer 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --name --email 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --signing-key --name 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --signing-key --email 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --signing-key --author 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --signing-key --committer 2>err &&
+ test_grep "cannot be used together" err &&
+ test_must_fail git whoami --verbose --name 2>err &&
+ test_grep "cannot be used together" err
+'
+
+test_expect_success 'git whoami outside of repository' '
+ nongit git whoami --author >actual &&
+ test_grep "<" actual
+'
+
+test_done
base-commit: 593c42fe075be0c8cd5239b3a2f21c610cbc9798
--
gitgitgadget
next reply other threads:[~2026-08-25 20:46 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-25 20:46 Andrew Pleeter via GitGitGadget [this message]
2026-08-25 21:24 ` [PATCH] builtin/whoami: add new 'whoami' command brian m. carlson
2026-08-25 21:41 ` Junio C Hamano
2026-08-31 23:59 ` [PATCH v2] builtin/ident: add new 'ident' command Andrew Pleeter via GitGitGadget
2026-09-01 4:39 ` Jeff King
2026-09-01 5:00 ` Junio C Hamano
2026-09-03 2:49 ` [PATCH v3] var: support broken-down idents, default key, multiple args, and -z Andrew Pleeter via GitGitGadget
2026-09-03 17:40 ` Junio C Hamano
2026-09-03 18:22 ` Ben Knoble
2026-09-04 9:11 ` Phillip Wood
2026-09-04 15:57 ` Junio C Hamano
2026-09-08 9:07 ` Phillip Wood
2026-09-08 4:09 ` [PATCH v4] var: support broken-down idents, signing " Andrew Pleeter via GitGitGadget
2026-09-08 13:54 ` Phillip Wood
2026-09-08 20:43 ` [PATCH v5] " Andrew Pleeter via GitGitGadget
2026-09-08 21:53 ` Junio C Hamano
2026-09-09 1:24 ` [PATCH v6] " Andrew Pleeter via GitGitGadget
2026-09-09 15:36 ` Phillip Wood
2026-09-09 16:42 ` Junio C Hamano
2026-09-10 3:09 ` [PATCH v7] " Andrew Pleeter via GitGitGadget
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=pull.2388.git.git.1787690802942.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=andrewpleeter@gmail.com \
--cc=git@vger.kernel.org \
/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