Comecei a usar o git e instalo o git e o gpg via homebrew. Por alguma razão, recebo esse erro quando git commit
olho para muitas outras perguntas sobre o stackoverflow relacionadas a este tópico e nenhuma delas funcionou para mim. Como posso corrigir esse erro para fazer o upload com sucesso.
error: gpg failed to sign the data
fatal: failed to write commit object
git config --local user.signingkey
a chave correta e ela será autoassinada novamente. e talvez desarmar o global comgit config --global --unset user.signingkey
Respostas:
Para solução de problemas, duas coisas a serem tentadas primeiro:
git config --global gpg.program gpg2
, para garantir que o git usegpg2
e nãogpg
echo "test" | gpg2 --clearsign
, para se certificar de quegpg2
está funcionandoSe tudo estiver correto, tente outra coisa:
brew install pinentry
para garantir que você tenha uma boa ferramenta instalada para entrada da senhaSe depois dessa instalação e você tentar novamente
git commit
e ainda receber ofailed to sign the data
erro " ":gpgconf --kill gpg-agent
para matar qualquer agente em execução que possa estar penduradoSe isso diz
gpgconf
não está instalado ou não tem uma--kill
opção, você pode tentar o seguinte:cp ~/.gnupg ~/.gnupg-GOOD
para salvar uma cópia da sua~/.gnupg
para reverter mais tarde, se necessáriobrew install gnupg21
instalar o GnuPG 2.1O motivo para salvar uma cópia do seu
~/.gnupg
diretório é que o GnuPG 2.1 potencialmente cria / altera alguns dados-chave de uma maneira que não é compatível com versões anteriores do GnuPG 2.0 e anterior, então se você quiser voltar mais tarde, poderá fazê-lomv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg
.Caso contrário, existem algumas etapas básicas a serem executadas para verificar se você tem um ambiente GnuPG funcional:
gpg2 -K --keyid-format SHORT
, para verificar se você tem pelo menos um par de chavesSe o resultado disso mostrar que você não possui uma chave secreta para o GnuPG, então você precisa criar uma:
gpg2 --gen-key
, para que o GnuPG o guie pelas etapas de criação de um par de chavesSe você receber uma mensagem de erro dizendo "ioctl inadequado para o dispositivo" , faça o seguinte:
export GPG_TTY=$(tty)
e / ou adicione isso ao seu~/.bashrc
ou˜/.bash_profile
fonte
gpg2 --gen-key
antes, é isso que você precisa fazer primeiro.export GPG_TTY=$(tty)
. Na medida em que exista uma maneira de usar o git sem o gpg, você poderá fazer isso por padrão ou apenas executandogit config --global commit.gpgsign false
a assinatura globalmente desativada de seus commits.echo "test" | gpg2 --clearsign
, encontrou um erro e isso me leva a esta discussão , que resolveu o meu problema: Eu só pôrexport GPG_TTY=$(tty)
no meu˜/.bash_profile
arquivo e então recarregado comsource ˜/.bash_profile
O Git precisa saber com qual chave está assinando.
Depois de configurar os arquivos GPG, gpg-agent e gpg.conf (consulte este guia ), é necessário executar
Obviamente, substitua a chave pública no final pela sua. Se você deseja que todo commit seja assinado por padrão, use
fonte
De alguma forma, seu git está configurado para assinar o GPG a cada confirmação. Não é necessário assinar com GPG para confirmar ou enviar usando git. Provavelmente está dando o erro porque seu mecanismo de assinatura de gpg ainda não está configurado.
Se você é novo no git, tente fazê-lo funcionar primeiro sem a assinatura do GPG e, em seguida, adicione mais tarde, se realmente precisar.
Você pode verificar como o seu git está configurado em relação ao gpg fazendo:
O que pode produzir zero ou mais linhas, incluindo:
Se "commit.gpgsign" for verdadeiro, você terá a assinatura de gpg ativada. Desative-o com:
Em seguida, tente executar seu commit novamente. Agora ele deve ser executado sem a assinatura do gpg. Depois de obter o git básico funcionando, tente adicionar a assinatura do gpg de volta ao mix.
fonte
git config --global --unset commit.gpgsign
trabalhou para mim :)Consulte @sideshowbarker e a solução @Xavier Ho, resolvi meu problema seguindo as etapas a seguir.
Suponha que o gpg2 esteja instalado pelo brew,
Lembrado pelo meu colega, preciso anexar
para ~ / .zshrc, se estiver usando zsh, caso contrário, adicione ~ / .bash_profile
Para o macOS,
o gpg2 é combinado com gpg no brew e, portanto, o comando gpg é apontado para gpg2
e tem pinentry-mac para entrada de senha
Adicionar linha
Lembrado pelo meu colega, preciso anexar
para ~ / .zshrc, se estiver usando zsh, caso contrário, adicione ~ / .bash_profile
fonte
Eu estou usando isso. Ele suporta o zsha e funciona no Windows Subsystem for Linux:
fonte
Verifique se a sua chave está vencida. Depois de fixar a data de validade (não é necessário criar uma nova chave, a menos que você queira),
git
funcionará normalmente.Uma maneira de corrigir a chave expirada:
(Nota:
$
representa o prompt da linha de comando, digite os comandos após o prompt; pressione Enter após cada comando)$ gpg2 --list-keys
para encontrar o ID da chave apropriado (caracteres depois\
depub
linha)$ gpg2 --edit-key <key id>
- isso abre o shell gpg, com o prompt alterado paragpg>
gpg> expire
- siga as instruções para definir a nova data de validade da chave primáriaEm seguida, se houver subchaves que expiraram (
sub
mostradas na linha), redefina as datas de vencimento também:gpg> key 1
- seleciona a primeira subchavegpg> expire
- siga as instruções para definir a nova data de validade da subchaveRepita para cada subchave subsequente, conforme necessário.
fonte
save
no prompt do gpg quando terminar!Isso funcionou para mim no ubuntu 18.04
Verifique sua chave gpg
se você receber uma resposta em branco, gere uma chave GPG
execute novamente o primeiro comando, você deve obter uma saída como:
definir chave de canto git
então você está pronto para ir! (--global é opcional)
Alternativamente, se você não se importa de assinar com sua chave ssh
observe que isso não é recomendado devido a um problema de segurança de acordo com esta pergunta aqui e aqui
fonte
Eu tive que corrigir o gpg.program no caminho absoluto para o gpg:
Estou usando o Windows com cygwin.
fonte
choco install gpg4win
Solução:
Fonte
fonte
Este erro também pode ocorrer quando sua chave GPG expirou. Gerar uma nova chave e adicioná-la ao Git deve resolver isso.
fonte
Tive esse problema depois de atualizar para o gnupg 2.x. Veria que o gpg2 está referenciando chaves de maneira diferente: eu ainda tinha
signingkey = ABC98F11
(configuração de gpg v1) na minha~/.gitconfig
. Os identificadores de chave para o gpg2 são mais longos. Procure-os comgpg --list-secret-keys
fonte
Eu havia feito uma
git
chave com três chaves separadas paracertify
/sign
/encrypt
e a chave era exibida como expirada no futuro (depois de funcionar bem por alguns dias):fez uma nova chave sem adicionar subchaves separadas para resolver o problema.
fonte
Pode ser que sua configuração do Git tenha sido definida como gpgsign = true . Tente configurá-lo como false se você não deseja atribuir seus commits. Vá para a pasta do repositório e altere o arquivo
A partir disso ...
Para isso...
fonte
Para mim, esse erro começou a ocorrer
git tag -s
no Debian GNU / Linux quando mudei depinentry-gnome3
parapinentry-curses
(usandoupdate-alternatives --config pinentry
) para facilitar o acesso remoto. Ocorreu apenas comgit tag -s
, não comgpg
(por exemplo,gpg --clearsign
) em si.A única alteração necessária para fazê-lo funcionar novamente neste caso foi adicionar
export GPG_TTY=$(tty)
aos meus arquivos de inicialização do shell.Embora eu não tenha recebido a mensagem de erro "ioctl inadequado para dispositivo" mencionada como indicador dessa correção em outra resposta a esta pergunta.
Nota: Como a causa para obter esse erro foi completamente diferente daquela para aqueles que sugeriram
export GPG_TTY=$(tty)
antes (geralmente como uma dica lateral) em outras respostas a esta pergunta, decidi que essa pergunta precisa de outra resposta que mencione queexport GPG_TTY=$(tty)
pode ser a principal correção e única coisa necessária em alguns casos.fonte
update-alternatives --config pinentry
fez isso por mim. Estou com SSH na minha área de trabalho epinentry
foi definido como/usr/bin/pinentry-gnome3
(que deve ter um fallback TTY quando o SSH estiver no ou quando for alternado para um console virtual). Mas não estava funcionando, aparentemente. Definir o padrão para/usr/bin/pinentry-tty
o truque para mim. Talvez eu precise restaurá-lo quando voltar à minha área de trabalho, mas, por enquanto, estou bem.export GPG_TTY=$(tty)
não foi suficiente. Fiz isso, mas precisava mudarpinentry
antes que eu pudesse assinar meu commit.O que resolveu isso para mim foi garantir que o nome da chave correspondesse ao meu nome de usuário git. Presumo que os e-mails também devem corresponder. Isso pode ter a ver comigo usando o GPG KeyChain no meu Mac. Não tenho certeza.
Eu pensei que estava nomeando a chave quando preenchi isso, mas acho que estava pedindo meu nome (nome de usuário git).
fonte
Eu tive esse erro no macos - para tentar solucionar problemas, tentei listar as chaves para verificar se elas haviam expirado usando
gpg2 --list-keys
- verifiquei que as chaves não haviam expirado e que a chave correta foi definida na minha configuração usandogit config --global user.signingkey
.Depois de executar esses comandos, de repente fui capaz de realizar confirmações assinadas novamente sem problemas. Não alterei meus arquivos ou chaves de configuração - nem criei uma instância nova do Terminal. Parecia que o gpg2 estava de alguma forma estranho no meu mac.
fonte
Eu resolvi o problema instalando
brew install gpg2
e fazendogit config --global gpg.program gpg2
fonte
O mesmo erro também pode ser causado quando você expirou a chave na sua configuração do git.
Verifique o conteúdo
cat .git/config
e procure porsigningkey
valor e verifique se ele expirou. Se sim, atualize-o com o novo.fonte
Se você estiver usando o smart card / yubikey para armazenar sua chave GPG e definir a configuração
signkey
do git pela chave armazenada no cartão (e todas as respostas acima parecem não resolver o problema), o PIN bloqueado do cartão pode ser o causa raiz desse problema.Para verificar o PIN bloqueado:
Se o contador for semelhante a
Em seguida, seu PIN é bloqueado (após três tentativas malsucedidas).
Para desbloquear o PIN:
fonte
Para mim, um simples
brew unintstall gnupg && brew cask reinstall gpg-suite
resolve o problema.Ele desinstala o (no meu caso) gpg manualmente homebrew-isallall e reinstala todo o GPG Suite.
fonte
No meu caso, eu misturei a configuração gpg e a configuração smimesign fornecidas na documentação de assinatura de confirmação aqui: https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing- chave
Depois de trabalhar por horas, achei que a melhor maneira de corrigi-lo era desmarcar tudo relacionado ao gpg e reconfigurar o gpg.
Como mencionado na resposta de Jason Thrasher, encontre toda a configuração do git relacionada ao gpg usando:
Em seguida, desmarque tudo de maneira correta e localmente usando:
Em seguida, reconfigure seguindo a documentação oficial fornecida acima. Espero que isto ajude.
fonte
Se você já instalou o pinentry e o gpg e parou de funcionar do nada:
Verifique se o seu gpg funciona:
Se estiver escrito
gpg: signing failed: No pinentry
, basta reiniciar o cliente daemon gpg, que fica parado de tempos em tempos:Agora deve estar funcionando:
fonte
No meu caso, esse erro ocorreu ao executar
git commit
em uma pequenatmux
janela que não era capaz de atender ao prompt da senha.fonte
Isso ajudará você a se livrar dele
git config commit.gpgsign false
fonte