Gitの使用を開始したばかりで、homebrewを使用してgitとgpgをインストールします。何らかの理由で、git commit
を実行するとこのエラーが発生します。このトピックに関する他の多くのstackoverflowの質問を調べましたが、どれも私にとってはうまくいきませんでした。このエラーを修正して、正常にアップロードできるようにする方法を教えてください。
error: gpg failed to sign the data
fatal: failed to write commit object
トラブルシューティングのために、最初に試すべき2つのこと:
gpg
ではなくgit config --global gpg.program gpg2
を使用するように、gpg2
を実行しますecho "test" | gpg2 --clearsign
を実行して、gpg2
自体が機能していることを確認しますそれで問題ない場合は、次のことを試してください。
brew install pinentry
を実行して、パスフレーズエントリ用の適切なツールがインストールされていることを確認しますそのインストール後にgit commit
を再試行しても、まだ「failed to sign the data
」エラーが表示される場合:
gpgconf --kill gpg-agent
を実行して、ハングしている可能性のある実行中のエージェントをすべて終了します。gpgconf
がインストールされていない、または--kill
オプションがない場合は、mightこれを試してください:
cp ~/.gnupg ~/.gnupg-GOOD
は、~/.gnupg
のコピーを保存して、必要に応じて後で元に戻すbrew install gnupg21
はGnuPG 2.1をインストールします~/.gnupg
dirのコピーを保存する理由は、GnuPG 2.1がGnuPG 2.0以前との下位互換性のない方法でいくつかのキーデータを作成/変更する可能性があるため、ifに戻ることです後で、mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
を実行できます。
それ以外の場合、GnuPG環境が機能していることを確認するために実行する基本的な手順がいくつかあります。
gpg2 -K --keyid-format SHORT
を実行して、少なくとも1つのキーペアがあることを確認しますその出力に、使用するGnuPGの秘密鍵がないことが示されている場合は、秘密鍵を作成する必要があります。
gpg2 --gen-key
を実行して、GnuPGにキーペアを作成する手順を案内します「デバイスの不適切なioctl」というエラーメッセージが表示された場合は、次のようにします。
export GPG_TTY=$(tty)
を実行し、それを~/.bashrc
または˜/.bash_profile
に追加しますGitは、署名するキーを知る必要があります。
GPG、gpg-agent、およびgpg.confファイルをセットアップしたら( このガイド を参照)、実行する必要があります
git config --global user.signingkey EB11C755
明らかに、最後の公開鍵を自分のものに置き換えてください。デフォルトですべてのコミットに署名する場合は、使用します
git config --global commit.gpgsign true
どういうわけかgitは、コミットごとにGPGに署名するように構成されています。 GPGでの署名は、gitを使用してコミットまたはプッシュする必要はありません。 gpg署名メカニズムがまだ構成されていないため、エラーが発生している可能性があります。
Gitが初めての場合は、最初にGPGに署名せずにGitを最初に動作させ、本当に必要な場合は後でサインインを追加してください。
Gpgに関してgitがどのように構成されているかを確認するには、次を実行します。
git config -l | grep gpg
以下を含む、0行以上の行が生成される場合があります。
commit.gpgsign=true
「commit.gpgsign」がtrueの場合、gpg署名が有効になっています。以下で無効にします:
git config --global --unset commit.gpgsign
その後、コミットを再度実行してください。これで、gpg署名なしで実行されるはずです。基本的なgitが機能するようになったら、gpg署名をミックスに追加してみてください。
@sideshowbarkerと@Xavier Hoソリューションを参照して、次の手順で問題を解決しました。
Brewによってインストールされたgpg2を想定し、
git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key
gpg2 -K --keyid-format SHORT
... /。gnupg/pubring.gpg
sec rsa2048/A61C6FC 2017-06-29 [SC] [有効期限:2019-06-29]
git config --global user.signingkey 0A61C6FC
私の同僚が思い出した、追加する必要があります
export GPG_TTY=$(tty)
zshを使用する場合は〜/ .zshrcに、それ以外は〜/ .bash_profileに追加します
gpg2はbrewのgpgと結合されるため、gpgコマンドはgpg2を指します。
brew install gpg2
醸造情報gpg
gnupg:安定2.2.6(ボトル入り)
git config --global gpg.program gpg
gpg -K --keyid-format SHORT
パスフレーズ入力用のpinentry-macがあります
brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf
行を追加
pinentry-program/usr/local/bin/pinentry-mac
キーの有効期限が切れていることを確認してください。有効期限を修正したら(必要に応じて新しいキーを作成する必要はありません)、git
は通常どおり機能します。
期限切れのキーを修正する1つの方法:
(注:$
はコマンドラインプロンプトを表し、プロンプトの後にコマンドを入力し、各コマンドの後にEnterキーを押します)
適切なキーID(pub
行の$ gpg2 --list-keys
の後の文字)を見つけるための\
$ gpg2 --edit-key <key id>
-これにより、プロンプトがgpg>
に変更されたgpgシェルが開きます
gpg> expire
-指示に従って、主キーの新しい有効期限を設定します
次に、期限切れのサブキーがある場合(sub
が行に表示されます)、有効期限もリセットします。
gpg> key 1
-最初のサブキーを選択gpg> expire
-指示に従って、サブキーの新しい有効期限を設定します
必要に応じて、後続のサブキーごとに繰り返します。
Gnupg 2.xにアップグレードした後にこの問題が発生しました。 gpg2はキーを異なる方法で参照していることがわかります。signingkey = ABC98F11
にはまだ~/.gitconfig
(gpg v1設定)がありました。 gpg2のキー識別子はより長くなります。 gpg --list-secret-keys
で調べてください
これはubuntu 18.04で私のために働いた
gpgキーを確認してください
gpg -K --keyid-format LONG
空の応答を受け取った場合、GPGキーを生成します
gpg --generate-key
最初のコマンドを再実行すると、次のような出力が得られます。
sec rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid [ultimate] yourname<your_email>
ssb rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]
gitの歌唱キーを設定する
git config --global user.singingkey 95A854E0593B3214
その後、あなたは行ってもいいです! (--globalはオプションです)
別の方法として、sshキーでの署名を気にしない場合
git config commit.gpgsign false
Gitの設定が設定されている可能性がありますgpgsign = trueコミットを割り当てたくない場合はfalseに設定してください。リポジトリフォルダーに移動し、ファイルを変更します
nano .git/config
これから...
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "Origin"]
url = [email protected]:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = true
これに...
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "Origin"]
url = [email protected]:yourrepo/project.git
fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
remote = Origin
merge = refs/heads/master
[user]
signingkey = <GPG-KEY>
[commit]
gpgsign = false
私はそれを使用しています。 zshaをサポートし、LinuxのWindows Subsystemで動作します。
export GPG_TTY=$(tty)
このエラーは、GPGキーの有効期限が切れている場合にも発生する可能性があります。これを解決するには、新しいキーを生成してGitに追加する必要があります。
私にとって、このエラーは、Debian GNU/Linuxでgit tag -s
からpinentry-gnome3
に切り替えたときにpinentry-curses
で発生し始めました(update-alternatives --config pinentry
を使用)。それはgpg
(例:git tag -s
)自体ではなく、gpg --clearsign
でのみ発生しました。
この場合に再び機能させるために必要な唯一の変更は、Shellスタートアップファイルにexport GPG_TTY=$(tty)
を追加することでした。
ただし、この質問に対する別の回答でこの修正のインジケータとして言及されている「デバイスの不適切なioctl」エラーメッセージは表示されませんでした。
注:このエラーが発生する原因は、この質問の他の回答で(通常はサイドヒントとして)export GPG_TTY=$(tty)
を提案した人とはまったく異なるため、この質問にはexport GPG_TTY=$(tty)
に言及する別の回答が必要であると判断しました主な修正であり、場合によっては唯一必要なこともあります。
git
/certify
/sign
の3つの個別のキーを使用してencrypt
キーを作成し、キーが将来期限切れとして表示されました(数日間正常に動作した後):
pub rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
Key fingerprint = 4670 59C1 7592 08B8 7FA5 313B 2A42 B6A6 4CD1 E9DA
uid [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub rsa2048/A3913A3C 2017-04-28 [] [expired: never ]
問題を解決するために個別のサブキーを追加せずに新しいキーを作成しました。
brew install gpg2
をインストールしてからgit config --global gpg.program gpg2
を実行する問題を解決しました