Como remover email pessoal de commits do Git

Como remover email pessoal de commits do Git
Como remover email pessoal de commits do Git

Protegendo a privacidade do seu e-mail no GitHub

Ter seu e-mail pessoal exposto em commits do GitHub pode ser uma preocupação de privacidade, especialmente ao trabalhar em repositórios públicos. Se você abriu uma solicitação pull (PR) que foi mesclada e percebeu que seu e-mail pessoal está visível, é importante tomar medidas para ocultá-lo.

Neste guia, exploraremos vários métodos para remover ou ocultar seu endereço de e-mail da visão pública após a fusão de um PR. Também discutiremos se os mantenedores têm a capacidade de alterar as informações dos commits e como alterar seus commits de forma eficaz.

Comando Descrição
git filter-branch Reescreve o histórico de commits para alterar as informações do autor e do committer no repositório Git.
export GIT_AUTHOR_NAME Define o nome do autor para os commits que estão sendo reescritos na operação filter-branch.
export GIT_AUTHOR_EMAIL Define o e-mail do autor para os commits que estão sendo reescritos na operação filter-branch.
wget Baixa arquivos da internet, usados ​​aqui para baixar a ferramenta BFG Repo-Cleaner.
bfg-1.13.0.jar Arquivo Java Archive para BFG Repo-Cleaner, que simplifica o processo de limpeza do histórico do repositório.
--replace-text Comando BFG Repo-Cleaner para substituir texto específico (endereços de e-mail) no histórico do repositório.
git reflog expire Expira entradas no reflog, o que é útil para limpar referências ao histórico reescrito.
git gc --prune=now Executa a coleta de lixo e remove objetos inacessíveis imediatamente, usados ​​após reescrever o histórico.
git commit --amend Altera o commit mais recente com novas informações do autor ou alterações no conteúdo do commit.

Removendo e-mail pessoal de commits do Git

Os scripts forneceram ajuda na remoção de informações pessoais de e-mail dos commits do Git após a mesclagem de uma solicitação pull. O primeiro script usa git filter-branch para reescrever o histórico de commits. Este comando itera através de cada commit, verificando se o email do autor ou do committer corresponde ao email antigo. Se isso acontecer, ele o substituirá pelo novo e-mail anônimo. Depois de reescrever o histórico de commits, um push forçado é necessário para atualizar o repositório remoto. O export GIT_AUTHOR_EMAIL e export GIT_COMMITTER_EMAIL comandos são cruciais aqui para garantir que os commits reescritos tenham as informações de email corretas.

O segundo script aproveita BFG Repo-Cleaner, que é uma alternativa mais simples e rápida ao filter-branch. Ao usar o --replace-text comando, o BFG pode substituir todas as instâncias do email antigo pelo novo ao longo do histórico do repositório. Após a substituição, o script realiza uma coleta de lixo com git gc --prune=now para limpar quaisquer dados residuais. O terceiro script se concentra em alterar o commit mais recente usando git commit --amend, que permite alterações rápidas nas informações do autor sem reescrever todo o histórico.

Usando Git Filter-Branch para reescrever o histórico de commits

Usando Shell Script com Git

#!/bin/sh

# Ensure you have a clean working directory
git checkout main

# Rewrite the commit history to change the author email
git filter-branch --env-filter \
'
OLD_EMAIL="my.personal@email.me"
CORRECT_NAME="My Username"
CORRECT_EMAIL="12345678+username@users.noreply.github.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

# Force push the changes to the repository
git push --force --tags origin 'refs/heads/*'

Usando BFG Repo-Cleaner para remoção mais fácil de e-mail

Utilizando Java com BFG Repo-Cleaner

# Download BFG Repo-Cleaner
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

# Run BFG to replace the old email with the new one
java -jar bfg-1.13.0.jar --replace-text 'my.personal@email.me==12345678+username@users.noreply.github.com' .

# Cleanup and perform garbage collection
git reflog expire --expire=now --all && git gc --prune=now --aggressive

# Push the changes to the remote repository
git push --force

Alterando o último compromisso para alteração de e-mail

Usando a linha de comando do Git para atualização simples

# Change the email for the last commit
git commit --amend --author="My Username <12345678+username@users.noreply.github.com>"

# Push the amended commit to the repository
git push --force

Garantindo a privacidade após mesclar uma solicitação pull

Outro aspecto a considerar ao tentar remover emails pessoais dos commits do Git é o uso de GitHub’s personal email settings. Ao configurar seu cliente Git para usar um endereço de email privado fornecido pelo GitHub, você pode evitar a exposição de seu email real em commits futuros. Isso pode ser feito configurando seu e-mail para o formato username@users.noreply.github.com. Além disso, habilitar a privacidade do e-mail nas configurações do GitHub garante que seu e-mail privado seja usado para operações Git baseadas na web.

Para commits que já foram enviados e mesclados, os mantenedores do GitHub têm poder limitado para alterar os dados históricos dos commits. No entanto, eles podem ajudar aplicando políticas de repositório que incentivam ou exigem que os contribuidores usem e-mails privados. Em casos extremos, podem ajudar na remoção de dados confidenciais, mas isso geralmente envolve reescrever o histórico, o que pode afetar todos os contribuidores.

Perguntas frequentes sobre privacidade de e-mail em commits do Git

  1. Como posso evitar que meu e-mail seja exposto em commits futuros?
  2. Defina seu e-mail para username@users.noreply.github.com na sua configuração do Git.
  3. Posso alterar o e-mail para commits já enviados?
  4. Sim, você pode usar git filter-branch ou BFG Repo-Cleaner para reescrever o histórico de commits e alterar o email.
  5. Qual é a maneira mais fácil de ocultar meu email em commits futuros?
  6. Configure sua conta GitHub para usar um email privado e defina o email do seu cliente Git como username@users.noreply.github.com.
  7. Alterar um commit altera seu histórico?
  8. Sim, git commit --amend altera o commit mais recente, que pode ser forçado a atualizar o repositório.
  9. Os mantenedores do repositório podem alterar minhas informações de commit?
  10. Os mantenedores têm capacidade limitada de alterar o histórico de commits, mas podem impor políticas de privacidade para commits futuros.
  11. É seguro reescrever o histórico de commits?
  12. Reescrever o histórico pode afetar a colaboração, por isso deve ser feito com cuidado, de preferência em um ambiente controlado.
  13. Qual é o impacto das mudanças forçadas?
  14. O push forçado pode sobrescrever o histórico, o que pode confundir os colaboradores, portanto, comunique-se claramente antes de fazê-lo.
  15. A privacidade do e-mail pode ser aplicada em toda a organização?
  16. Sim, as organizações do GitHub podem definir políticas e usar ferramentas como pre-commit hooks para garantir a privacidade do e-mail.
  17. O que são ganchos de pré-confirmação?
  18. Ganchos de pré-commit são scripts executados antes de um commit ser criado, garantindo que ele atenda a determinados critérios, como usar um e-mail privado.

Considerações finais sobre privacidade de e-mail em commits do Git

Proteger suas informações pessoais é essencial, especialmente ao contribuir para repositórios públicos. Ao definir suas configurações do Git para usar um endereço privado e utilizar ferramentas como git filter-branch e BFG Repo-Cleaner, você pode remover efetivamente dados pessoais do histórico de commits. Embora os mantenedores do repositório tenham poder limitado para alterar as informações do commit, eles podem apoiar práticas de privacidade. Certifique-se sempre de comunicar qualquer reescrita do histórico à sua equipe para evitar confusão. Com esses métodos, você pode manter sua privacidade enquanto contribui para projetos de código aberto.