🚧 Em Construção 🚧
Pular para o conteúdo principal

Assinando commits

Porque assinar commits?

Assinar commits é uma prática recomendada para garantir a autenticidade e a integridade dos commits. Isso é especialmente importante em projetos de código aberto, onde qualquer pessoa pode contribuir com código.

Gerando uma chave GPG

Para gerar uma chave GPG, você pode utilizar o comando:

gpg --full-generate-key

Para listar as chaves GPG, você pode utilizar o comando:

gpg --list-keys

Para exportar a chave GPG, você pode utilizar o comando:

gpg --export --armor <chave-gpg>

Copie a chave GPG

-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----

Para mais detalhes sobre como gerar uma nova chave GPG, consulte Gerar uma nova chave GPG.


Configurando o Git para assinar commits automaticamente

DICA: Se você tiver configurado anteriormente o Git para usar um formato de chave diferente ao assinar com o --gpg-sign, desmarque essa configuração para que o formato padrão de openpgp seja usado.

git config --global --unset gpg.format

Para listar as chaves GPG, você pode utilizar o comando:

gpg --list-secret-keys --keyid-format=long

Você pode configurar o git para assinar commits automaticamente com o comando:

git config --global user.signingkey <chave-gpg>

Opcionalmente, para configurar o Git a fim de assinar todos os commits e rótulos por padrão, insira o seguinte comando:

git config --global commit.gpgsign true
git config --global tag.gpgSign true

Consulte configurando o Git para assinar commits automaticamente para mais detalhes.

Associando a chave GPG ao seu email

gpg --list-secret-keys --keyid-format=long

Identifique a chave GPG que você deseja associar ao seu email.

gpg --edit-key <chave-gpg>

Adicione o email que você deseja associar à chave GPG.

gpg> adduid

Siga as solicitações para fornecer seu nome verdadeiro, endereço de e-mail e quaisquer comentários. Você pode modificar as entradas escolhendo N, C ou E. Para manter seu endereço de email privado, use seu endereço de email no-reply fornecido pelo GitHub. Para saber mais, confira Configurar o endereço de e-mail do commit.

Real Name: YOUR REAL NAME
Email address: your@email.com
Comment: [optional] YOUR COMMENT
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Salve as alterações.

gpg> save

Veja como adicionar uma chave GPG ao seu GitHub.

Assinando um novo commit

git commit -S -m "Descrição do commit"

Assinando um commit antigo

Liste seus commits recentes

Use o seguinte comando para ver o histórico dos commits:

git log --oneline

Isso listará os commits com seus hashes. Localize o commit que deseja assinar.

Inicie um rebase interativo

Se o commit que deseja assinar está, por exemplo, 3 commits atrás, rode:

git rebase -i HEAD~3

Isso abrirá um editor com uma lista dos commits recentes.

Edite o commit

Encontre o commit que deseja assinar e altere pick para edit, assim:

edit abc1234 Mensagem do commit

pick def5678 Outro commit
pick ghi9101 Mais um commit

Salve e feche o editor.

Assine o commit

Agora, assine o commit com sua chave GPG:

git commit --amend --no-edit -S

Se precisar definir uma chave específica, use:

git commit --amend --no-edit -S -u SEU_ID_GPG

Continue o rebase

Depois de assinar o commit, continue o rebase com:

git rebase --continue

Se houver mais commits a serem editados, repita o processo.

Forçar o push (se necessário)

Se o commit já foi enviado para um repositório remoto, você precisará forçar a atualização:

git push --force-with-lease

DICA: --force-with-lease é mais seguro do que --force, pois evita sobrescrever alterações de outros colaboradores.