Software Engineer

Por que você deveria assinar seus commits

Git é um sistema de controle de versão distribuído que permite aos desenvolvedores gerenciar alterações em seu código ao longo do tempo. Cada vez que um desenvolvedor faz alterações na base de código, ele cria um novo commit, que representa um retrato do código em um ponto específico no tempo. Juntamente com as alterações no código, cada commit também inclui metadados que fornecem informações importantes sobre a aquele commit.

Os metadados de um commit incluem várias informações importantes, como author, committer, committer date e author date. O author é a pessoa que originalmente escreveu o código, enquanto o committer é a pessoa que aplicou as alterações no repositório. O author date refere-se à data, e hora em que o código original foi escrito, enquanto o committer date refere-se à data e hora em que as alterações foram efetuadas no repositório. O commiter date mudará quando você fizer alterações usando --amend, um push forçado, um rebase ou outros comandos git.

Em resumo, os metadados de um commit no git fornecem informações críticas sobre o código, incluindo quem o escreveu, quem aplicou as alterações e quando essas alterações foram feitas. Essas informações são essenciais para entender o contexto do código e acompanhar as alterações na base de código ao longo do tempo. Por padrão, o metadado autor/committer date é preenchido com a data atual, enquanto o author/committer é preenchida com a configuração git user, presente no arquivo de configuração git (~/.gitconfig).

No git, você pode especificar o autor de um commit, usando o argumento --author. Conforme mencionado, o autor padrão é obtido do arquivo de configuração git.

Um commit especificando o autor
Um commit especificando o autor

Eu criei este commit apenas preenchendo o argumento --author, da seguinte forma:

git commit --author="Lucas Felipe <[email protected]>"

Como você pode ver, eu defini lpaivareis como o autor, mas eu era o responsável pelo commit, então o git me colocou como o committer. Isso aconteceu porque fiz esse commit do meu computador e minha configuração do git tem meu nome de usuário e e-mail.

Mas o que acontece se eu quiser fingir ser alguém e definir meu arquivo de configuração git com outro nome de usuário e e-mail? Exatamente! Esse é o ponto.

git config user.name "Lucas Felipe"
git config user.email "[email protected]"

Agora, todos os meus commits neste repositório (e em todos, se eu defini-lo globalmente usando o argumento --global) vão constar que foram feitos pelo usuário lpaivareis:

Commit indevidamente atribuído a lpaivareis
Commit indevidamente atribuído a lpaivareis

Este é um comportamento esperado do git, você pode fazer commits em nome de outras pessoas, ou apenas colocá-los como autores de um commit, e eles não precisam aceitar nada, nem saberão disso. Neste caso, meu amigo Lucas Felipe (lpaivareis) nem sequer tem acesso ao repositório privado que estou utilizando.

A única maneira de deixar as pessoas confiarem em seus commits, provando que eles realmente vieram de você, é assinando todos os seus commits. Tudo o que você precisa fazer é gerar uma chave GPG, adicioná-la à sua conta GitHub ou GitLab e dizer ao git para assinar todos os seus commits com essa chave:

git config --global commit.gpgsign true

Assinando seus commits, você ganhará uma linda badge de verificado em todos os seus commits:

Um commit devidamente assinado
Um commit devidamente assinado

O objetivo deste post é apenas convencê-lo de que você realmente precisa assinar todos os seus commits, e se eu consegui fazê-lo, vou lhe deixar ótimas referências de como fazer isso:

Obrigado por ler!

Referencias