Como assinar confirmações do git a partir de um IDE como o IntelliJ?
Pergunta, questão Como assinar confirmações do git usando um IDE como o IntelliJ no Windows?
Se você estiver interessado, leia o que tentei aqui:
Eu segui principalmenteGuia do Github. Fiz questão de não esquecer de reiniciar o bash / IntelliJ depois de alterar os arquivos de configuração.
Gere um novo par de chaves GPGAdicionar a chave GPG à minha conta do GitHubAssociar um email verificado (pelo GitHub) à minha chave GPG onde eu verifiquei o email no meu.gitconfig
é o mesmo.Informe o Git sobre minha chave GPGAssinar uma confirmação com o GPG e confirmou que foi Verfied no Github.Nessa mesma página, defino confirmações para serem assinadas por padrão comgit config --global commit.gpgsign true
(Estou usando o git 2.12). Fiz um novo commit e verifiquei se ele foi assinado comgit verify-commit HEAD
Quando tento confirmar no IntelliJ, recebogpg: cannot open tty 'no tty'
então eu encontreiO IntelliJ falha ao confirmar as alterações ao tentar assinar a confirmação (GPG) e acrescentouno-tty
para o meuC:\Users\username\.gnupg\gpg.conf
arquivo e reiniciado.
Então eu recebo o errogpg: Sorry, no terminal at all requested - can't get input
o que parece razoável, porque acabei de adicionar a opção que tem algo a ver com nenhum terminal. Gostargpg: Desculpe, nenhum terminal é solicitado - não é possível obter entrada diz que a solução é remover ono-tty
que espero não se aplique ao meu caso.
Outras respostas na primeira pergunta sugeriram adicionaruse-agent
bem nogpg.conf
arquivo, o que resulta no erro adicionalgpg: gpg-agent is not available in this session
. Ah, espere, talvez eu precise configurar o gpg-agent.
O melhor guia para Windows que eu encontrei foi oWiki do Archlinux (Okay, certo). Especifica para adicionar aC:/Users/username/.gnupg/gpg-agent.conf
o tempo de vida, então eu crio esse arquivo e adicionodefault-cache-ttl 34560000
emax-cache-ttl 34560000
conformehttps://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session
Agora vamos realmente começar esse gpg-agent,https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running me fez verificar que de fatogpg-agent --version
era muito mais novo quegpg --version
, então eu gostaria de ter o gpg2 para poder rodargit config --global gpg.program gpg2
.
Mas eu não tenho o gpg2 disponível na linha de comando. Eu instaleiGpg4win (versões binárias, na parte inferior) e até o Gnupg 2 separadamente, mas isso não me deu o gpg2 na linha de comando, notei que tinha que dobrar o GNU nos meus Arquivos de Programas (x86) que acho que deveria ter. Comwhere gpg
Eu descobri que pelo menos não estava apontando para o gpg que acabei de baixar, porque esse apareceu em segundo lugar. Então eu apontei o git para o caminho certo comgit config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
Agora eu tenho o errogpg: skipped "keyid": secret key not available
. A solução emgpg: "N" ignorado: chave secreta não disponível foi o que acabei de fazer, para que não ajude. Então eu percebi que configurava tudo com o outro gpg, não com este. eu fizalias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
verificadogpg --version
e fez a coisa toda novamente. Na verdade, eu coloquei a linha de alias no meu.bash_profile
então eu não preciso executá-lo toda vez.
Quando eu tentogpg --gen-key
trava imediatamente. Não sei por que, não acho que o problema não seja entropia suficiente porque o gpg mais antigo funcionou bem, mas é possível que a versão mais recente exija mais entropia. De qualquer forma, não consegui encontrar nenhum usuário do Windows com o mesmo problema na Internet.
Funciona! Quando faço o commit no IntelliJ, ele solicita minha senha com pinentry apenas uma vez. Mas agora não posso me comprometer com o Git Bash, com ono secret key
erro que faz sentido porque como eu dissegpg --list-keys
está vazio: nenhuma chave está associada a este gpg.
Intellij IDEA assinando GIT confirma com GPG é relevante, mas a única resposta é para MAC e parece não se aplicar ao Windows. Isso me levou a:
me.m01.eu dicas para adicionar uma nova variável de ambiente chamadaGNUPGHOME
que aponta paraC:\Users\username\.gnupg
. Esse diretório existe, mas como mencionado na resposta defalha na assinatura do commit do git: chave secreta não disponível Eu acho que meu novo gpg usaC:\Users\username\AppData\Roaming\gnupg
então eu adicionei isso. Eu verifiquei comprintenv GNUPGHOME
que eu o adicionei corretamente (tive que reiniciar). Não mudou nada, no entanto.
Desde que minhas chaves estão, penso emC:\Users\username\.gnupg
Tentei apontar a variável de ambiente para lá, mas não ajudou,gpg --list-keys
ainda estava vazio. Então eu tive que encontrar outra maneira de apontar para o gpg onde estão minhas chaves.
gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
deu as chaves corretas, então eu decidi adicionarhomedir C:\Users\s156757\.gnupg
para o meuC:\Users\username\AppData\Roaming\gnupg\gpg.conf
arquivo que eu tive que criar. Por causa deesse bug. Eu confirmeigpg --list-keys
devolvi minhas chaves. Ainda é o mesmo erro, adicionandono-tty
euse-agent
para este arquivo conf não ajudou.
Agora posso confirmar no IntelliJ, mas não no Git Bash, o que resulta emskipped "keyid": No secret key
.
Mais pensamentos
Não consegui exportar chaves de gpg para gpg2 comgpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import
Eu pensei que o Gpg4win sozinho talvez pudesse ser configurado para que eu não precise digitar minha senha todas as vezes. Infelizmente, não consegui encontrar em nenhum lugar uma maneira de fazer o Gpg4win se lembrar da minha senha.Mais tarde pensei, se me lembro corretamentegpg --list-secret-keys
nunca retornou nada para o gpg 2. Só mais tarde descobri que esse comando é diferente degpg --list-keys
.Em resumo, esse é o principal problema: o gpg-agent permite o cache da senha, mas a versão gpg do git não corresponde à versão gpg-agent, portanto você deve instalar o gpg 2 certo primeiro. Mas não consegui fazer essa instalação de maneira que pudesse confirmar com o Git Bash e o IntelliJ.