Git identities

An identity is the name and email Git commits with, plus an optional signing key and an SSH key for pushing. You give one to a workspace, and every repository in that workspace commits with it. Before each commit Mergepond checks the repository's Git config matches, and warns you when it doesn't.

Where to find it

  • Repository › Workspaces and Identities…, then the Identities list under the workspaces.
  • Sidebar › gear beside the repository name, or Repository › Repository Settings…, to choose the identity for one repository.
  • Changes tab › commit box: the "Committing as …" line opens Repository settings.
  • Command palette › Workspaces: Commit as label in this repo, Follow the workspace identity in this repo.

The Identities list

Each identity shows its label, then "name <email>" followed by "no signing key", "SSH signing key" or "GPG signing key", and how many workspaces use it: "Not used", "1 workspace" or "Shared by N workspaces". Add identity opens an empty form; click an identity to edit it. One identity can serve several workspaces; the form's header says so, or names the workspaces that use it: "Used by Acme and Side projects. Changes apply to every repo there."

Identity form

FieldDefaultWhat it does
LabelEmpty (placeholder "Work")Required. How the identity is named in the app. "Give the identity a label, like Work or Personal." if left empty.
NameEmptyGit's user.name. Required.
EmailEmptyGit's user.email. Required. "Fill in the name and email Git should commit with." if either is empty.
Signing keyEmptyA GPG key ID, or an SSH public key (a path ending .pub, or a key starting ssh-). Typing an SSH key switches the format to SSH.
FormatDon't signDon't sign, GPG or SSH. Sets gpg.format and turns on commit.gpgsign.
SSH key for pushing and pullingEmpty (placeholder ~/.ssh/id_ed25519_acme)Optional. The private key Git uses for this identity's pushes and fetches. "Leave empty to use your SSH config."

Buttons: Delete identity (on an existing one), Cancel, Save or Add identity.

What gets written to Git

Mergepond never changes your global Git config. When a repository takes an identity, Mergepond writes these into the repository's own .git/config:

KeyValue
user.nameThe identity's name
user.emailThe identity's email
user.signingkeyThe signing key, if set
commit.gpgsigntrue when a signing format is chosen
gpg.formatopenpgp or ssh
core.sshCommandssh -i '<key>' -o IdentitiesOnly=yes when an SSH key is set

When a repository is set back to following a workspace that has no identity, all six keys are unset and Git falls back to your global config.

Repository settings

The Repository settings sheet is headed with the repository name and "Commits as name <email>." Under Identity you choose:

  • Follow workspace: label <email>, or "Follow workspace, which has no identity", or plain "Follow the workspace" when the repo has none. This is the default.
  • Always label for each identity, which pins this repository to it regardless of workspace.

Picking one writes the keys above into the repository's Git config. If the config already says something else, the sheet warns: "Git is set to commit as X, but this repo expects label <email>. Pick it above to write it into the repo's Git config."

Identity in the project settings files

A repository can also name its identity in a file, so it travels with a clone or stays with you without the app's settings. In .mergepond.toml, which is committed, identity = "Work" names one of your profiles by label; the file may not spell out a name and email, because everyone who clones it would commit as that person. In .mergepond.local.toml, which Git ignores, you can name a profile the same way or write [identity] with name, email and the optional keys. Project settings files has the exact form.

Mergepond takes the first of these that is set: the identity in your local file, the repository's "Always label" pick above, the profile the team file names, then the workspace's identity. A name and email written inline in the local file show in the commit box as the identity .mergepond.local.toml.

The check before each commit

The commit box always shows who the commit will be from: "Committing as name <email>, label identity". The identity's label is a button that opens Repository settings. If Git has no identity at all it reads "No Git identity is set. Pick one".

When the repository's Git config disagrees with the identity its workspace expects, by name or by email (compared case-insensitively), an amber line appears: "This repo's workspace commits as email." with a Use label button that writes the identity into the repo. When the expected identity comes from a settings file instead, the line names the repository's settings file, and Use label drops the repository's own pick in the app so the file's identity applies, then writes it into the repository's Git config in the same way: user.name and user.email, plus user.signingkey, commit.gpgsign and gpg.format when the identity signs. Git then commits as that identity even outside Mergepond. The commit still goes through if you ignore it; Mergepond warns, it doesn't block.

The commit box on the Changes tab, with the Committing as line under the message field.

Signatures in History

The inspector shows each commit's signature state: Signed by name in lily when the key is good, "Signed by name, key not trusted", "Signed, not checked", Bad signature, Signature expired, Signing key expired, Signing key revoked, or Not signed. See Commit graph and search.

Free and Pro

Identities work on Free and Pro alike. Only the number of workspaces is limited on Free; see Workspaces and windows.