Segui alguns artigos sobre os atributos bonitos na nota de lançamento do Git 2.10 . O processo de atualização do git para a 2.10.0 e as alterações para global .gitconfig
resultaram da seguinte forma:
[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
Mas agora que tento assinar meus commits usando
git commit -a -S -m "message"
Eu vejo o seguinte erro -
Você precisa de uma senha para desbloquear a chave secreta
usuário: "XYZ (assinado digitalmente)"
Chave RSA de 2048 bits, ID AAAAAAAA, criada 01/01/2016
erro: gpg não conseguiu assinar os dados fatal: falha ao gravar o objeto de confirmação
Nota - Ainda posso confirmar alterações usandogit commit -a -m "message"
Existe uma maneira de superar o mesmo? Ou alguma alteração necessária nas gpg
configurações para se dar bem com a atualização do git?
Atualização 1
Também buscando mais utilidade, seguindo Existe uma maneira de "autossignar" confirmações no Git com uma chave GPG? . Eu já configurei a chave usando
git config --global user.signingkey ED5CDE14(with my key)
git config --global commit.gpgsign true
e, obviamente, obtendo o mesmo erro de qualquer maneira.
fonte
gpg failed to sign the data
toda vez que uso-S
. No 2.8, posso assinar um commit sem problemas. Não sei o que aconteceuuser.signingkey
corrigiu meu problema, estranhamente.user.name
foi = nome usado ao criar chave PGP!Respostas:
Corri para esse problema com o OSX.
Resposta original:
Parece que uma atualização de gpg (da distribuição) foi alterada para o local de
gpg
paragpg1
, você pode alterar o binário em que o git consulta o gpg:Se você não tem gpg1:
brew install gpg1
.Resposta atualizada:
Parece que o gpg1 está sendo preterido / "suavemente eliminado" , então você provavelmente deve atualizar para o gpg2, infelizmente isso envolve mais algumas etapas / um pouco de tempo:
A primeira parte instala o gpg2, e a última é um hack necessário para usá-lo . Para solucionar problemas, consulte esta resposta (embora seja sobre linux e não brew), ela sugere um bom teste:
Se este teste for bem-sucedido (nenhum erro / saída inclui assinatura PGP), você atualizou com êxito a versão mais recente do gpg.
Agora você deve poder usar a assinatura git novamente!
Vale a pena notar que você precisará ter:
Nota: Depois de executar uma confirmação assinada, você pode verificar se está assinado com:
que incluirá informações de gpg para o último commit.
fonte
gnupg2
combrew
mexeu com links simbólicos, assim,gpg
foi removido, eu tinha ligações correção usandobrew link --overwrite gnupg2
.gpg1
é o executável ainda exportado.killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry
finalmente, fixa-lo para mimSe o gnupg2 e o gpg-agent 2.x forem utilizados, defina a variável de ambiente
GPG_TTY
.Consulte a documentação do GPG sobre problemas comuns .
fonte
set -x GPG_TTY (tty)
no seu perfil.su
pararoot
em um servidor remoto~/.zshrc
e posso fazer confirmações novamente, agora que ela se conecta corretamente ao terminal. Obrigado por toda sua ajuda!Se tudo falhar, use
GIT_TRACE=1
para tentar ver o que o git está realmente fazendo:Agora execute o comando com falha manualmente:
Acontece que minha chave expirou,
git
não era a culpa.fonte
.git/config
tinha umname
especificado em um projeto que não correspondia ao meu email de assinatura. Isso foi suficiente para rejeitá-lo.gpg -bsau <key>
na minha máquina não executa nada. Isso deve demorar muito para ser executado? Ou isso significa que a chave está boa para ser usada? @VonC alguma ideia?Eu FEITO -lo através deste curto e fácil receita:
Confirmação de assinatura automática no macOS (globalmente e com diferentes IDEs):
Obtenha seu
signingkey
em desta forma .Coloque o seguinte no
gpg.conf
arquivo (editar arquivo com onano ~/.gnupg/gpg.conf
comando):Coloque o seguinte no
gpg-agent.conf
arquivo (editar arquivo com onano ~/.gnupg/gpg-agent.conf
comando):Atualização :
Pode ser necessário executar o
killall gpg-agent
comando após editar o arquivo de configuraçõesgpg.conf
, de acordo com os comentários. Como o comando auto-explicativo diz, esse comando encerrará o agente GPG (Gnu Privacy Guard).fonte
killall gpg-agent
após definir os arquivos de configuração, então funcionou!pinentry-mac
? Não digo que não podemos, mas a organização do GPGTools é apoiada por uma equipe muito pequena e o repositório tem apenas 5 colaboradores versus o uso, obrew install gnupg
que alavanca o trabalho do gnupg.org .user.signingkey
conjunto local inválido , que eu não havia notado na minha configuração de sourcetree, nem nas minhas configurações globais (porque não pensei em olhar para a configuração localgit config --local --get user.signingkey
). e global (git config --global --get user.signingkey
) são iguais ou, melhor ainda, desativam o local se for inválido (git config --local --unset user.signingkey
)Pode ajudar a matar o processo
gpg-agent
que pode ficar com os dados antigos. Então, o novogpg-agent
iniciado pedia senha.fonte
gpg-agent --daemon
para iniciá-lokillall gpg-agent
gpgconf --kill gpg-agent
Siga o URL abaixo para configurar a confirmação assinada https://help.github.com/en/articles/telling-git-about-your-signing-key
se ainda conseguir o gpg falhar ao assinar os dados fatais: falha ao gravar o objeto de confirmação
isso não é problema com o git, isso é com o GPG, siga as etapas abaixo
1
gpg --version
echo "test" | gpg --clearsign
se estiver mostrando:
export GPG_TTY=$(tty)
4. tente novamente
echo "test" | gpg --clearsign
em qual assinatura PGP é obtida.git config -l | grep gpg
gpg.program = gpg commit.gpgsign = true
6.apply
git commit -S -m "commitMsz"
fonte
export GPG_TTY=$(tty)
foi o truque. Adicionado isso ao meu.zshrc
arquivoPara quem está enfrentando esse problema em máquinas MacOS , tente o seguinte:
brew uninstall gpg
brew install gpg2
brew install pinentry-mac
(se necessário)gpg --full-generate-key
Crie uma chave usando um algoritmo.gpg --list-keys
git config --global user.signingkey <Key from your list>
git config --global gpg.program /usr/local/bin/gpg
git config --global commit.gpgsign true
gpg --armor --export <key>
e adicione essa chave ao GitHub nas chaves GPG: https://github.com/settings/keys (com as linhas START e END incluídas)Se o problema persistir:
test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
Se o problema persistir:
Instale https://gpgtools.org e assine a tecla que você usou pressionando Sign na barra de menus: Key -> Sign
Se o problema persistir:
Ir para: o mundial
.gitconfig
de arquivo que no meu caso é em:/Users/gent/.gitconfig
E modificar o .gitconfig arquivo (por favor, certifique-mail e nome são os mesmos com o que você criou ao gerar o Key) :fonte
Meus dois centavos aqui:
Ao criar e adicionar uma chave ao gpg-agent, você define algo chamado
passphrase
. Agora quepassphrase
em algum momento expira, égpg
necessário digitá-lo novamente para desbloquear sua chave, para que você possa começar a assinar novamente.Quando você usa qualquer outro programa que interfaces com
gpg
,gpg
é aviso para que você digite sua senha que não aparecem (basicamentegpg-agent
quando daemon não pode mostrar-lhe o diálogo de entrada nastdin
).Uma das soluções é
gpg --sign a_file.txt
inserir a senha que você inseriu ao criar sua chave e tudo ficará bem (gpg-agent
deve assinar automaticamente)Veja esta resposta sobre como definir tempos limite mais longos para sua senha, para que você não precise fazer isso o tempo todo.
Ou você pode remover completamente a senha com
ssh-keygen -p
Edit: Faça um
man gpg-agent
para ler algumas coisas sobre como fazer com que o acima aconteça automaticamente e adicione as linhas:no seu .bashrc se você estiver usando o bash (esta é a resposta correta, mas eu também estou mantendo minha linha de pensamento acima)
fonte
Atualização em outubro de 2016: a edição 871 mencionou "A assinatura parou de funcionar no Git 2.9.3"
O Git para Windows 2.10.1, lançado há dois dias (4 de outubro de 2016), corrigiu a assinatura do GPG interativo de confirmações e tags.
Resposta original:
Lendo " 7.4 Git Tools - Signing Your Work ", presumo que você tenha "
user.signingkey
" sua configuração definida.A última grande refatoração (anterior ao Git 2.10) em torno do gpg estava no commit 2f47eae2a , aqui a mensagem de erro foi movida para
gpg-interface.c
Um log nesse arquivo revela a recente alteração no commit af2b21e (Git 2.10)
Portanto, verifique como você especificou sua
user.signingkey
configuração e a versão do gpg que você está usando (gpg1 ou gpg2), para ver se isso afeta a mensagem de erro.Também há confirmação 0581b54, que altera a condição da
gpg failed to sign the data
mensagem de erro (em complemento à confirmação 0d2b664 ):A confirmação 4322353 mostra que o gpg agora usa um arquivo temporário, portanto, pode haver problemas corretos em torno disso.
fonte
user.signingkey
conjunto de configurações. Também usandogpg (GnuPG) 2.0.3
.O rastreamento git foi muito revelador para a minha situação ...
Eu precisava gerar uma chave inicial de acordo com o formato
git
verificado. É melhor copiar o valor passado-bsau
acima nos logs como está e usar abaixo.Então se torna,
Então funcionou.
Espero que ajude.
fonte
git trace
foi realmente útil.Usando o cygwin, mudei recentemente para
gpg2
. Então tive o mesmo problema ao assinar com o git após a configuraçãogit config gpg.program gpg2
.Tente
echo "test" | gpg2 --clearsign
ver se o gpg2 está funcionando. Eu achei a solução mais fácil de definirgit config gpg.program gpg
, porque isso funciona. Mas você também terá um erro melhor dessa maneira - por exemplo, que você precisa instalar o pinentry.fonte
gpg: signing failed: Inappropriate ioctl for device
que pode ser resolvidoexport GPG_TTY=$(tty)
. Fonte: github.com/keybase/keybase-issues/issues/2798No OS X, usando
gnupg2
via brew, eu apenas tinha que matar o agente gpg , às vezes acontece:E defina a
env
variável, se necessário:Consulte também os problemas comuns de GPG e esta resposta aqui também.
fonte
alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'
.Eu já vi respostas semelhantes, mas nada exatamente como o que funcionou para mim. No Linux, eu tive que matar e reiniciar o meu
gpg-agent
com:Isso fez o truque para mim. Parece que você precisa ter
user.signingkey
definido sua chave privada também pelo que outros comentários estão dizendo.fonte
Pode ser um agente gpg pendurado.
Tente
gpgconf --kill gpg-agent
conforme discutido aquifonte
Eu recebi esse erro no Ubuntu 18.04 e minha chave expirou .
Para ver isso, executei isso e confirmou que minhas chaves expiraram:
Para corrigir isso, executei (usando o ID exibido no comando anterior):
A partir daí, eu estendi a expiração do
key 0
ekey 1
seguir as instruções que se resumia a digitaçãokey 0
em seguida,expire
e seguir as instruções. Então repetindo parakey 1
.Depois, para testar isso, executei:
E antes da correção, falhava com o erro:
Mas após a correção, o mesmo comando assinou com êxito a mensagem, então eu sabia que as coisas estavam funcionando novamente!
fonte
Eu tive o mesmo problema. Fico feliz em informar que o problema não reside,
git 2.10.0
mas simgnupg 1.4.21
.Desclassificar temporariamente o gnupg para 1.4.20 corrigiu o problema para mim.
Se você estiver usando o homebrew e atualizou seus pacotes como eu fiz, provavelmente poderá executar apenas
brew switch gnupg 1.4.20
para reverter.fonte
Verifique se seu e-mail foi definido corretamente.
fonte
Se o email associado ao uid da sua chave GPG for diferente do email que você está usando no git, você precisará adicionar outro ID de usuário à sua chave OU usar uma chave que corresponda exatamente.
Você pode adicionar outro UID usando:
Veja para /superuser/293184/one-gnupg-pgp-key-pair-two-emails
fonte
Devo ter atualizado acidentalmente o gpg de alguma forma, porque o comprei depois de tentar testar se o gpg funciona:
Correndo
gpgconf --kill all
consertou para mim.Espero que isso ajude alguém.
fonte
Eu tive um problema semelhante com as fontes Git mais recentes (2.12.2) criadas juntamente com as fontes mais recentes de todas as suas dependências (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).
Acontece que
libreadline
estava dando problemas ao GnuPG:E, é claro, tentar obter informações úteis do Git com
-vvv
falha, então a falha foi um mistério.Para resolver a falha do PGP devido ao ReadLine, siga as instruções em Não é possível atualizar ou usar o gerenciador de pacotes - erro de gpg :
fonte
As respostas acima são ótimas, mas elas não funcionaram para mim. O que resolveu meu problema foi exportar o público e o segredo chaves .
listar as chaves da máquina de onde estamos exportando
exportar as chaves
vá para a máquina que estamos importando e importando
bingo bongo, pronto!
referência: https://www.debuntu.org/how-to-importexport-gpg-key-pair/
ps. Minhas chaves foram originalmente criadas no bootcamp windows 7 e eu as exportei para o meu mac air (mesma máquina física, diferente virtualmente)
fonte
Estou no Ubuntu 18.04 e recebi o mesmo erro, fiquei preocupado por semanas também. Finalmente percebi que o gpg2 não está apontando para nada. Então simplesmente corra
E tada, funciona como charme.
Seus commits agora terão a tag verificada com eles.
fonte
Eu me deparei com esse erro não por causa de qualquer problema de configuração, mas porque minha chave expirou. A maneira mais fácil de estender sua validade no OSX é abrir o aplicativo GPG Keychain (se você o tiver instalado) e solicitará automaticamente que você o estenda. Dois cliques e pronto. Espero que isso ajude outros Googlers :)
fonte
Isso começou a acontecer repentinamente para mim no Ubuntu, não tenho certeza se alguma atualização recente fez isso, mas nenhum dos problemas existentes era aplicável a mim (eu havia
GPG_TTY
definido, tentei matar o agente etc.). Ogpg
comando independente estava falhando com este erro:Eu tentei correr
gpg
com a--debug-all
opção e notei a saída abaixo:O texto acima indica que há algum problema com o
pinentry
programa. O Gpg normalmente é executadopinentry-curses
para mim, então eu mudei parapinentry-tty
(eu tinhaaptitude install
primeiro) e o erro foi embora (embora eu não consiga mais a entrada de senha em tela cheia, mas não gosto disso de qualquer maneira). Para fazer essa alteração, eu tive que adicionar a linhapinentry-program /usr/bin/pinentry-tty
para~/.gnupg/gpg-agent.conf
matar o agente comgpgconf --kill gpg-agent
(ele é reiniciado na próxima vez).fonte
Nenhuma das respostas acima parecia corresponder ao meu problema. Meu
gpg
binário (/usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2
) foi instalado como parte do GPG Suite , e não pelo brew.No entanto, senti que o conselho se resumia a: "use o
gpg
binário que for o mais recente disponível no brew". Então eu tentei:Eu verifiquei que eu tinha mudado corretamente o
gpg
sobre a minha$PATH
para apontar para o novo executável de bebida:E eu também disse explicitamente ao git qual
gpg
binário usar:Bem, talvez isso não seja completamente estanque, pois é sensível ao caminho. Na verdade, eu não cheguei a confirmar que o git havia mudado para invocar a bebida
gpg
.De qualquer forma: nada disso foi suficiente para
git commit
assinar com êxito meus commits novamente.O que funcionou para mim, em última análise, foi atualizar o GPG Suite . Eu estava executando a versão 2016.7 e descobri que a atualização para 2016.10 corrigia o problema para mim.
Abri
GPG Keychain.app
e cliquei em "Verificar atualizações ...". Com a nova versão: confirmações assinadas funcionaram corretamente novamente.fonte
obtê-lo configurado simplesmente:
fonte
Muito parecido com o @birchlabs, depois de muitas escavações / pesquisas, descobri que não era GPG, mas sim GPG Suite. Eu fiz
cask reinstall gpg-suite
e resolveu isso para mim.fonte
Se isso aconteceu aleatoriamente e funcionou perfeitamente no passado, como é o meu caso, tente sair (
cmd+shift+q
) e entrar novamente. Trabalhou para mimfonte
No meu caso, nenhuma das soluções mencionadas em outra resposta funcionou. Descobri que o problema era específico de um repositório. A exclusão e a clonagem do repositório novamente resolveram o problema.
fonte
Um tipo estranho, mas verifique se o seu terminal é grande o suficiente! Você pode dizer se é muito pequeno executando
echo test | gpg --clearsign
- ele fornecerá uma mensagem de erro bastante óbvia para você saber. Se não for grande o suficiente, seu agente GPG não poderá exibir sua pequena caixa de ncurses.Este não se aplicará se você usar um agente da GUI ou algo que não use ncurses.
fonte