git commit署名に失敗しました:秘密鍵は利用できません


84

Gitを使用してコミットしようとすると、このエラーが発生します。

gpg: skipped "name <name@mail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

以下のように新しいキーを生成しましたが、それでも同じエラーが発生します

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <name@mail.com>
sub   2048R/112A8C2D 2016-04-23

秘密鍵は上記と同じです

私はこれがgitタグ付け用のGPGキーの生成を見つけ 、手順に従いましたが、それでも機能しません、何か考えはありますか?


3
Windowsユーザーの場合、Windows上のGitが正しいgpgを使用しないため、このエラーが発生する可能性がはるかに高くなります。PATHで正しいバイナリが見つからないため、gitは縮小されたMSYS内で内部的にバンドルされたgpgを使用します。これは、キーがどこにあるかを認識していません。以下の回答のいくつかで指定されているように、gpg.programまたはG(NU)PGHOME変数を設定すると解決されます。
Abel Cheung

回答:


78

秘密鍵を使用する前に、それを構成する必要があります。

git config user.signingkey 35F5FFB2

または、すべてのリポジトリに同じキーを使用する場合は、グローバルに宣言します。

git config --global user.signingkey 35F5FFB2

出典:Gitツール-作業への署名


レオナルド、ありがとうございました!できます!!質問がばかげていたら申し訳ありませんが、私はそれを解決する方法がわかりませんでした。
エミリオメネンデス2016

優秀な!ユーザーの署名キーを指定すると、1つのキーに複数の電子メールアドレスがあり、git電子メールとキーの最初のアドレスが一致しないことも回避できます。
user2943160 2016年

1
公開リポジトリに秘密鍵を使用して.gitconfigを保存するのは安全ですか?
melihovv 2017

1
@melihovvが尋ねた記録のために:—秘密鍵はGPGキーリングになければなりません。そのキーのハッシュIDのみが構成に保存されます。
BRPocock 2017年

2
私は一緒にこれをしなければなりませんgit config --global gpg.program gpg2でした。
Splaktar 2017

108

これはWindows10で機能しました(gpg.exeへの絶対パスを使用していることに注意してください)。

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

これは、修正前に発生したエラーでした。

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

2
secret key not availableVS Codeでこのエラーが発生し、gpg.exe場所を設定することで解決しました。
Dawid 2018

2
これは私にもうまくいきました。特にgithub自体からの設定手順に従った後。
バス

1
Windows Insiderビルドがインストールされるたびに、このオプションはリセットされます。これをありがとう:)
VRG

これは、gpgの絶対パスを追加した後も私にとってはうまくいきました。どうもありがとう。
Adarsh Srivastava

64

私のために働いたのは追加でした

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

gpg2.exeのフルパスを見つけたい場合:

where gpg2.exe

3
インストールされているGnuPGのバージョンによっては、のgpg.exe代わりにこれを行う必要がありますgpg2.exe
Mark Rotteveel 2018

14

私はこれらすべての答えを完成させたいのです。なぜなら、これには多くの問題があるからです。

これらの例では--globalフラグを使用していますが、これらをローカルで実行したい場合はフラグを削除できます。

gitで秘密鍵を構成する

git config --global user.signingkey 35F5FFB2

gitでwitchgpgプログラムtuの使用を構成する(オプション)

いくつかのシステム(exempleのためのUbuntuは)持つことができますgpggpg2同時に。使用することを指定する必要がありますgpg2

git config --global gpg.program gpg2

GPG_TTYのエクスポート(オプション)

これらのコマンドをssh環境で使用すると、次のエラーが発生する可能性があります:Inappropriate ioctl for deviceまたはgpg: échec de la signature : Ioctl() inapproprié pour un périphérique。これは次の方法で修正できます:

export GPG_TTY=$(tty)

GPGの歌唱を自動的に有効にする(オプション)

git config --global commit.gpgsign true

使用しなくなった場合、どうすれば無効にできますか?
MadonaSyombua18年

1
--unsetこれらのgit configコマンドにフラグを追加して無効にすることができます
alphayax 2018年

私は実際にこのgitconfig --global commit.gpgsign trueを使用しましたが、falseと言いました。
マドナソンブア2018年

7

Windows10マシンでも同じことが起こっているという状況がありました。

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

コマンド"C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGgpg --list-secret-keys --keyid-format LONG私に完全に異なる結果を与える場所!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

主な理由は以前の回答に関連していましたが、別の意味でした。

  • 私はGPGのgit(構成されたパス)バージョンを使用してgpgキーを作成していました
  • Gitは、ダウンロードしたバージョンのgpgをコミットに使用するように構成されました。
  • GPGの実装は、独自の証明書データベースとストレージを使用しているようです。

これが、このメッセージにつまずいて、以前の回答が問題を解決しない人に役立つことを願っています。


Visual Studioコミュニティはデフォルトで署名に秘密鍵を使用しているようですが、git cliは別のリスト/実装を使用しているため、cliエクスポートからkleopatraに秘密鍵を追加する必要がありました。
ニチッシュ

5

変数を設定する必要がありますGNUPGHOME。それがないと、GnuPGはあなたの鍵を見つけることができません。

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

Unixでは、パスに追加するだけです。
Windowsでは、コントロールパネルを開いて次のように設定する必要があります

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg

1
私にとってはそうではありませんでしたGNUPGHOME。それでGPGHOME私のために働く
Sysix 2018年

1

同じ問題がありました。.gitconfigのgit名とメールストアが、提供されているgpgキーのものと異なっていたということです。一致させるためにそれらを変更し、それが機能し始めました。


0

使用"C:\Program Files\Git\usr\bin\gpg.exe"することが私にとっての解決策でした。
kleopatraをアンインストールする必要がありました。それで、それは機能していませんでした。

要約すると、

  • kleopatraは必要ありません。代わりに、GITのデフォルトを使用してください。

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    

-4

たぶん、あなたはあなたが権利を持っているあなた自身のリポジトリを複製する必要があります。別の人のリポジトリのクローンを作成したときに、この問題が発生しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.