Para usar uma chave GPG como padrão para assinar commits do Git, siga estes passos:
1. Liste suas chaves e identifique o ID
Uma chave GPG pública não é suficiente para assinar — você precisa ter também a chave privada correspondente. Por isso, liste as chaves secretas (não apenas gpg --list-keys), já usando a forma longa do ID:
gpg --list-secret-keys --keyid-format=long
Linux
Algumas instalações de GPG no Linux exigem
gpg2em vez degpg:gpg2 --list-keys --keyid-format LONGNesse caso, configure também o Git para usar o
gpg2:git config --global gpg.program gpg2
A saída se parece com isto:
$ gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot <hubot@example.com>
ssb 4096R/4BB6D45482678BE3 2016-03-10
sec→ chave primária. Nesse exemplo, o ID longo é3AA5C34371567BD2.ssb→ subchave (subkey). Nesse exemplo, o ID longo é4BB6D45482678BE3.
Copie o ID de 16 caracteres hexadecimais (forma longa) da chave — ou subchave — que você quer usar para assinar. Esse é o ID usado no passo 2.
Por que
--keyid-format=long?Sem essa flag o
gpgmostra só os últimos 8 caracteres do ID, que têm mais chance de colidir com o ID de outra chave. Use sempre a forma longa.
2. Configure o Git para usar essa chave
Se você tiver múltiplas chaves GPG, é necessário informar ao Git qual delas usar. Cole o comando abaixo substituindo <key-id> pelo ID copiado no passo anterior:
git config --global user.signingkey <key-id>
Exemplo, usando a chave primária do exemplo acima:
git config --global user.signingkey 3AA5C34371567BD2
Também é possível usar diretamente uma subchave:
git config --global user.signingkey 4BB6D45482678BE3
Marcando uma chave como preferida
Se você usa várias chaves/subchaves, anexe
!ao final do ID para dizer ao Git qual é a preferida (às vezes é preciso escapar com\!):git config --global user.signingkey 3AA5C34371567BD2!
Trocando de formato de assinatura
Se você já tinha configurado o Git para assinar com outro formato (ex.: SSH, via
--gpg-sign), remova a configuração antiga para voltar ao padrãoopenpgpdo GPG:git config --global --unset gpg.format
3. Habilite a assinatura de commits por padrão
Para assinar automaticamente todos os commits, execute:
git config --global commit.gpgsign true
Isso fará com que o Git assine cada commit sem precisar usar a flag -S manualmente.
4. (Opcional) Habilite a assinatura de tags por padrão
git config --global tag.gpgSign true
5. Faça commits
Agora os commits serão assinados automaticamente. Se preferir assinar manualmente, use:
git commit -S -m "Sua mensagem de commit"
6. Cache da senha (passphrase)
Se sua chave GPG tiver uma senha, considere usar um agente GPG ou ferramentas específicas do sistema operacional (como GPG Suite no macOS ou Gpg4win no Windows) para armazenar a senha em cache e evitar solicitações repetidas.
No macOS/Linux, também é comum expor a variável GPG_TTY no shell, para que o gpg consiga pedir a senha no terminal correto:
export GPG_TTY=$(tty)
Adicione essa linha ao ~/.zshrc/~/.zprofile (zsh) ou ~/.bash_profile/~/.bashrc (bash) para que valha em todas as sessões.
7. Verifique os commits assinados
Você pode verificar as assinaturas dos commits com:
git log --show-signature
Essa configuração garante que o Git use sempre a chave GPG especificada para assinar commits por padrão.
Outros métodos de assinatura
Além de GPG, o Git também aceita assinar commits/tags com chave SSH (
git config --global gpg.format ssh) ou certificado X.509 via smimesign. Ver a fonte oficial abaixo para detalhes.
Gerado via Perplexity AI, revisado e ampliado (passos 1 e 2) com base na documentação oficial do GitHub. Fontes:
- Informar ao Git sobre a chave de assinatura — GitHub Docs (pt-br)
- https://stackoverflow.com/questions/10161198/is-there-a-way-to-autosign-commits-in-git-with-a-gpg-key
- Assinar commits — GitHub Docs
- https://docs.github.com/en/enterprise-cloud@latest/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key?platform=windows
- https://docs.gitlab.com/user/project/repository/signed_commits/gpg/
- https://docs.github.com/en/enterprise-server@3.16/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key
- https://git-scm.com/book/pt-br/v2/Git-Tools-Signing-Your-Work
- https://docs.github.com/en/enterprise-server@3.5/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key
- https://dev.to/codedir/using-existing-gpg-key-to-sign-git-commits-5181
- https://graphite.dev/guides/using-gpg-keys-git-commit-signatures