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-ttyeuse-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 --importEu 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.

questionAnswers(2)

yourAnswerToTheQuestion