1. ホーム
  2. git

[解決済み】gpgがデータの署名に失敗した fatal: failed to write commit object [Git 2.10.0].

2022-01-26 15:59:50

質問

私は、いくつかの記事で かわいい 属性は Git 2.10 のリリースノートです。git を 2.10.0 にアップグレードして、グローバルな .gitconfig その結果、以下のようになります。

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = [email protected]
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

しかし、今、私のコミットに署名しようとすると

git commit -a -S -m "message"

次のようなエラーが表示されます。

の秘密鍵を解除するためにパスフレーズが必要です。

ユーザー: "XYZ (Digitally Signed) "。

2048ビットRSA鍵、ID AAAAAAAA、2016-07-01作成

error: gpg failed to sign the data fatal: failed to write commit オブジェクト

備考 - を使用して変更をコミットすることができます。 git commit -a -m "message"

同じように克服する方法はありますか?あるいは gpg を設定することで、git のアップグレードに対応できますか?


アップデート1

また、さらなる有用性を求めて、以下も。 Git のコミットを GPG 鍵で自動署名する方法はありますか? . を使って鍵の設定は済んでいます。

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

と表示され、明らかに同じエラーが発生します。

解決方法は?

OSXでこの問題に遭遇しました。

オリジナルの回答です。

gpgのアップデート(brewの)で gpg から gpg1 の場合、git が gpg を検索するバイナリを変更することができます。

git config --global gpg.program gpg1

gpg1を持っていない場合。 brew install gpg1 .

回答を更新しました。

gpg1が非推奨になるようです/。 使用しないようにしましょう。 そのため、おそらく実際に gpg2 に更新する必要があります。残念ながら、これにはかなりの追加手順と少しの時間が必要です。

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac

古い自作で

echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

最近だとM1マックとか。

echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf 
killall gpg-agent

最初の部分は gpg2 をインストールし、後の部分は 使用するために必要なハック . トラブルシューティングについては この回答 (ただし、これは brew ではなく linux についてです)、良いテストを提案しています。

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

このテストが成功した場合(エラーが出ない/出力にPGP署名が含まれる)、最新のgpgバージョンへのアップデートに成功したことになります。

これで、再びgitサインを使えるようになるはずです
注意すべきは、あなたが持っている必要があることです。

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

注:署名付きコミットを実行した後、署名付きであることを確認するために

git log --show-signature -1

を実行すると、最後のコミットの gpg 情報が含まれます。