LoginSignup
23
8

More than 1 year has passed since last update.

Gitでerror: gpg failed to sign the dataと出てコミットできないときの対処法

Last updated at Posted at 2021-03-24

問題

git commit -S -m "commit message"したところ、以下のようなエラーが出た。

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

対処法

(0. そもそもGPG鍵を生成した覚えがない方へ)

「そもそもGPGって何?そんなもの生成した覚えない」という方は以下の記事が参考になると思う。

1. 鍵のIDを調べる

まず、gpg --list-secret-keys --keyid-format LONGでssbのIDを調べる。このとき、

ssb   rsa2048/67983FDC1DEBDACB 2021-02-06 [S]
ssb   rsa2048/67983FDC1DEBDACB 2021-02-06 [SE]

のように[ ]内に"S"が含まれた鍵を選ぶようにする。そのような鍵がない場合はステップ2へ、ある場合はステップ3に飛ぶ。

2. Usageフラグを編集する

GPGキーの利用法(Usage)フラグが誤っているので、修正するか新しく鍵を作り直す。

修正する場合は以下のようにする。名前などは適宜読み替えてほしい。
実際に入力する行の頭には米印をつけている。

$ gpg --edit-key キーに設定した名前(Real name)
gpg (GnuPG) 2.2.27; 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  rsa2048/4D08708603E2AC85
     created: 2021-02-06  expires: 2023-02-06  usage: SC
     trust: ultimate      validity: ultimate
ssb  rsa2048/67983FDC1DEBDACB
     created: 2021-02-06  expires: 2023-02-06  usage: E
[ultimate] (1). goahi <goai@protonmail.com>

※gpg> key 1

sec  rsa2048/4D08708603E2AC85
     created: 2021-02-06  expires: 2023-02-06  usage: SC
     trust: ultimate      validity: ultimate
ssb*  rsa2048/67983FDC1DEBDACB
     created: 2021-02-06  expires: 2023-02-06  usage: E
[ultimate] (1). goahi <goai@protonmail.com>

※gpg> change-usage
Changing usage of a subkey.

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

※Your selection? s

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

※Your selection? q

sec  rsa2048/4D08708603E2AC85
     created: 2021-02-06  expires: 2023-02-06  usage: SC
     trust: ultimate      validity: ultimate
ssb*  rsa2048/67983FDC1DEBDACB
     created: 2021-02-06  expires: 2023-02-06  usage: SE
[ultimate] (1). goahi <goai@protonmail.com>

※gpg> save

この段階で一度git commit -S -m "commit message" でコミットできるか試してみる。無事コミットできたら終了。失敗したら次のステップへ。

3. GitにGPGキーを追加

ssb   rsa2048/67983FDC1DEBDACB 2021-02-06 [SE]

例えばこの場合、67983FDC1DEBDACBの部分がIDとなる。
Gitにgit config --global user.signingkey <鍵のID>でGPG鍵を追加する。ここまででコミットできるようになっているはず。

4. それでもコミットできないとき(一部のLinux環境)

~/.zshrc~/.bashrcなど使用するシェルの設定ファイルに以下を追記してターミナルを再起動する。また、これを追記してもVSCodeからターミナルを利用するとコミットできないことがあるので、その際はターミナルを直接起動する。

export GPG_TTY=$(tty)

参考記事

23
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
8