DEV Community

olistik
olistik

Posted on • Edited on

2 2

Set commit signing per git repository

When dealing with multiple git identities it's sometimes useful to perform a custom setup for commit signing, for each repository:

λ gpg --list-keys my@email.com
pub   dsa3072 2016-06-23 [SC]
      XXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYY
uid           [ unknown] olistik <my@email.com>
sub   elg3072 2016-06-23 [E]
Enter fullscreen mode Exit fullscreen mode

It is also possible to extract the the value with a bit of scripting (Ruby in this case):

λ gpg --list-keys --fingerprint --with-colons my@email.com | ruby -e "puts STDIN.read.lines.grep(/^fpr/)[0].match(/^.*:([0-9A-Z]+):.*/)[1]"
XXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYYZZXXYY
Enter fullscreen mode Exit fullscreen mode

And then update the git settings within the repository's directory:

λ git config user.signingkey XXYYZZ
λ git config commit.gpgsign true
λ git config user.email "my@email.com"
λ git config user.name "olistik"
Enter fullscreen mode Exit fullscreen mode

Here's a convenience script that can be invoked to setup commit signing:

#!/bin/bash

set -e

GPG_KEY=$(gpg --list-keys --fingerprint --with-colons my@email.com | ruby -e "puts STDIN.read.lines.grep(/^fpr/)[0].match(/^.*:([0-9A-Z]+):.*/)[1]")
git config user.signingkey $GPG_KEY
git config commit.gpgsign true
git config user.email "my@email.com"
git config user.name "olistik"
Enter fullscreen mode Exit fullscreen mode

Here are the versions of my environment:

λ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]
λ gpg --version
gpg (GnuPG) 2.2.17
λ git --version
git version 2.20.1 (Apple Git-117)
Enter fullscreen mode Exit fullscreen mode

Issues when committing

If you encounter the following error after a commit command:

error: gpg failed to sign the data
fatal: failed to write commit object
Enter fullscreen mode Exit fullscreen mode

You could try to update the GPG_TTY environment variable and re-run the commit command:

λ export GPG_TTY=$(tty)
Enter fullscreen mode Exit fullscreen mode

It it succeeds, then you can persist this change by putting this line into your .zshrc (or .bashrc according to the shell you are using).

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs