M1 MacでもVerifiedコミットするぞと、GPGキーをインポートしたら、エラーになってコミットが出来ない状態になってしまいました。
その原因と解決方法について書いておきます。

はじめに

今回は、Intel Macで出力したGPGキーを、M1 Macでインポートした際に発生したエラーの解決方法です。
パスコードの入力には pinentry-mac を使用しており、export GPG_TTY=$(tty) は設定している前提となります。
GPGキーのインポート方法や、GPGキーを使ってコミットに署名を付ける方法は以下の記事を参照してください。

発生するエラー

GPGキーのインポートではエラーになりませんが、コミットをすると以下のように失敗する状態になってしまいました。

$ git commit -m "失敗するよ"

> error: gpg failed to sign the data
> fatal: failed to write commit object

簡単な文字列で実行してもエラーになってしまいます。

$ echo "test" | gpg --clearsign

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> test
> gpg: signing failed: No pinentry
> gpg: [stdin]: clear-sign failed: No pinentry

エラーの解決方法

エラーの原因は、pinentry-mac のパスが変わっているためでした。

# Intel Mac
$ which pinentry-mac

> /usr/local/bin/pinentry-mac
# M1 Mac
$ which pinentry-mac

> /opt/homebrew/bin/pinentry-mac

なので、~/.gnupg/gpg-agent.conf に書いているパスを変更するだけで直ります。

- pinentry-program /usr/local/bin/pinentry-mac
+ pinentry-program /opt/homebrew/bin/pinentry-mac

変更したら、GPGを再起動させるために gnupg-agent を終了させます。
起動は自動なので、終了させるだけで大丈夫です。

$ gpgconf --kill gpg-agent

試しにもう一度、簡単な文字列で実行してみます。

$ echo "test" | gpg --clearsign

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> test
> -----BEGIN PGP SIGNATURE-----
> iHUEARYKAB0WIQTJMsSbSxup6Xnu6kqds4l7OZU5aQUCYckcLQAKCRCds4l7OZU5
> adAtAP94EcA3VLolDM5CokS++Llkwk1sRqagiPfd7ZNG6wVu7AEA+/9dZ3GD7yA9
> xVbgjySY97msTsJWp7mQcJPHQhAzgw8=
> =AR63
> -----END PGP SIGNATURE-----

このようなログが出ていれば成功です。
コミットも出来るようになっているので試してみてください!

おまけに

インポートしたGPGのリストを見ると以下のようになっています。

$ gpg --list-secret-keys --keyid-format=long

> /Users/username/.gnupg/pubring.kbx
> ------------------------------------
> sec   ed25519/[GPGキーID] YYYY-MM-DD [SC]
>       ****
> uid         [ unknown] YOURNAME (COMMENT) <YOUREMAIL>
> ssb  cv25519/**** YYYY-MM-DD [E]

この [ unknown] というのが気になりますよねー
以下のコマンドを実行すれば [ultimate] にすることが出来ます。

$ gpg --edit-key [GPGキーID] trust quit

> gpg (GnuPG) 2.3.4; Copyright (C) 2021 Free Software Foundation, Inc.
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Secret key is available.
> sec ed25519/[GPGキーID]
>    created: YYYY-MM-DD expires: never    usage: SC  
>    trust: ultimate   validity: unknown
> ssb cv25519/8A1C1B0A15331D56
>    created: YYYY-MM-DD expires: never    usage: E  
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>
> sec ed25519/[GPGキーID]
>    created: YYYY-MM-DD expires: never    usage: SC  
>    trust: ultimate   validity: unknown
> ssb cv25519/****
>    created: YYYY-MM-DD expires: never    usage: E  
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>
> Please decide how far you trust this user to correctly verify other users’ keys
> (by looking at passports, checking fingerprints from different sources, etc.)
>  1 = I don’t know or won’t say
>  2 = I do NOT trust
>  3 = I trust marginally
>  4 = I trust fully
>  5 = I trust ultimately
>  m = back to the main menu
> Your decision? 5

> Do you really want to set this key to ultimate trust? (y/N) y

> sec ed25519/[GPGキーID]
>    created: YYYY-MM-DD expires: never    usage: SC  
>    trust: ultimate   validity: unknown
> ssb cv25519/****
>    created: YYYY-MM-DD expires: never    usage: E  
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>

以上です。おつかれさまでしたー