Hoe persoonlijke e-mail uit Git Commits te verwijderen

Hoe persoonlijke e-mail uit Git Commits te verwijderen
Hoe persoonlijke e-mail uit Git Commits te verwijderen

Bescherm uw e-mailprivacy op GitHub

Het zichtbaar maken van uw persoonlijke e-mailadres in GitHub-commits kan een privacyprobleem zijn, vooral als u aan openbare repository's werkt. Als u een samengevoegde pull request (PR) heeft geopend en merkt dat uw persoonlijke e-mailadres zichtbaar is, is het belangrijk stappen te ondernemen om deze te verbergen.

In deze handleiding onderzoeken we verschillende methoden om uw e-mailadres uit het publieke zicht te verwijderen of onzichtbaar te maken nadat een PR is samengevoegd. We zullen ook bespreken of beheerders de mogelijkheid hebben om commit-informatie te wijzigen en hoe je je commits effectief kunt wijzigen.

Commando Beschrijving
git filter-branch Herschrijft de commitgeschiedenis om de auteur- en committerinformatie in de Git-repository te wijzigen.
export GIT_AUTHOR_NAME Stelt de auteursnaam in voor de commits die herschreven worden in de filter-branch operatie.
export GIT_AUTHOR_EMAIL Stelt het e-mailadres van de auteur in voor de commits die worden herschreven in de filter-branch-bewerking.
wget Downloadt bestanden van internet, hier gebruikt om de BFG Repo-Cleaner-tool te downloaden.
bfg-1.13.0.jar Java-archiefbestand voor BFG Repo-Cleaner, dat het proces van het opschonen van de repositorygeschiedenis vereenvoudigt.
--replace-text BFG Repo-Cleaner-opdracht om specifieke tekst (e-mailadressen) in de repositorygeschiedenis te vervangen.
git reflog expire Verloopt vermeldingen in de reflog, wat handig is voor het opschonen van verwijzingen naar herschreven geschiedenis.
git gc --prune=now Voert afvalinzameling uit en snoeit onbereikbare objecten onmiddellijk, gebruikt na het herschrijven van de geschiedenis.
git commit --amend Wijzigt de meest recente commit met nieuwe auteursinformatie of wijzigingen in de commit-inhoud.

Persoonlijke e-mail verwijderen uit Git Commits

De scripts boden hulp bij het verwijderen van persoonlijke e-mailinformatie uit Git-commits nadat een pull-verzoek was samengevoegd. Het eerste script gebruikt git filter-branch om de commitgeschiedenis te herschrijven. Dit commando doorloopt elke commit en controleert of de e-mail van de auteur of de committer overeenkomt met de oude e-mail. Als dit het geval is, wordt deze vervangen door de nieuwe, geanonimiseerde e-mail. Na het herschrijven van de commitgeschiedenis is een force push nodig om de externe repository bij te werken. De export GIT_AUTHOR_EMAIL En export GIT_COMMITTER_EMAIL commando's zijn hier cruciaal om ervoor te zorgen dat de herschreven commits de juiste e-mailinformatie hebben.

Het tweede script maakt gebruik van BFG Repo-Cleaner, wat een eenvoudiger en sneller alternatief is voor filterbranch. Door gebruik te maken van de --replace-text commando, kan BFG alle exemplaren van de oude e-mail vervangen door de nieuwe gedurende de geschiedenis van de repository. Na vervanging voert het script een garbage collection uit met git gc --prune=now om eventuele resterende gegevens op te ruimen. Het derde script richt zich op het wijzigen van de meest recente commit met behulp van git commit --amend, waarmee snelle wijzigingen in de auteursinformatie mogelijk zijn zonder de hele geschiedenis te herschrijven.

Git Filter-Branch gebruiken om de commitgeschiedenis te herschrijven

Shell-scripting gebruiken met 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/*'

Gebruik BFG Repo-Cleaner voor eenvoudigere e-mailverwijdering

Java gebruiken met 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

Wijziging van de laatste commit voor e-mailwijziging

Git Command Line gebruiken voor eenvoudig wijzigen

# 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

Privacy garanderen na het samenvoegen van een pull-verzoek

Een ander aspect waarmee je rekening moet houden als je persoonlijke e-mail uit Git-commits probeert te verwijderen, is het gebruik van GitHub’s personal email settings. Door uw Git-client te configureren om een ​​privé-e-mailadres van GitHub te gebruiken, kunt u voorkomen dat uw echte e-mailadres bij toekomstige commits zichtbaar wordt. Dit kunt u doen door uw e-mail in te stellen op het formaat username@users.noreply.github.com. Bovendien zorgt het inschakelen van e-mailprivacy in de instellingen van GitHub ervoor dat uw privé-e-mailadres wordt gebruikt voor webgebaseerde Git-bewerkingen.

Voor commits die al zijn gepusht en samengevoegd, hebben de beheerders van GitHub beperkte macht om historische commitgegevens te wijzigen. Ze kunnen echter wel helpen door repositorybeleid af te dwingen dat bijdragers aanmoedigt of verplicht om privé-e-mails te gebruiken. In extreme gevallen kunnen ze helpen bij het verwijderen van gevoelige gegevens, maar meestal gaat het daarbij om het herschrijven van de geschiedenis, wat van invloed kan zijn op alle bijdragers.

Veelgestelde vragen over e-mailprivacy in Git Commits

  1. Hoe kan ik voorkomen dat mijn e-mail zichtbaar wordt in toekomstige commits?
  2. Stel uw e-mailadres in op username@users.noreply.github.com in uw Git-configuratie.
  3. Kan ik het e-mailadres van reeds gepushte commits wijzigen?
  4. Ja, je kunt het gebruiken git filter-branch of BFG Repo-Cleaner om de commitgeschiedenis te herschrijven en de e-mail te wijzigen.
  5. Wat is de gemakkelijkste manier om mijn e-mailadres te verbergen in toekomstige commits?
  6. Configureer uw GitHub-account om een ​​privé-e-mailadres te gebruiken en stel het e-mailadres van uw Git-client in op username@users.noreply.github.com.
  7. Verandert het wijzigen van een commit de geschiedenis ervan?
  8. Ja, git commit --amend verandert de meest recente commit, die geforceerd kan worden gepusht om de repository bij te werken.
  9. Kunnen repository-beheerders mijn commit-informatie wijzigen?
  10. Beheerders hebben een beperkte mogelijkheid om de commitgeschiedenis te wijzigen, maar kunnen wel een privacybeleid afdwingen voor toekomstige commits.
  11. Is het veilig om de commitgeschiedenis te herschrijven?
  12. Het herschrijven van de geschiedenis kan de samenwerking beïnvloeden, dus dit moet zorgvuldig gebeuren, idealiter in een gecontroleerde omgeving.
  13. Wat is de impact van ingrijpende veranderingen?
  14. Force-push kan de geschiedenis overschrijven, wat medewerkers in verwarring kan brengen, dus communiceer duidelijk voordat u dit doet.
  15. Kan e-mailprivacy binnen de hele organisatie worden afgedwongen?
  16. Ja, GitHub-organisaties kunnen beleid instellen en tools gebruiken zoals pre-commit hooks om e-mailprivacy te garanderen.
  17. Wat zijn pre-commit hooks?
  18. Pre-commit hooks zijn scripts die worden uitgevoerd voordat een commit wordt gemaakt, zodat deze aan bepaalde criteria voldoet, zoals het gebruik van een privé-e-mail.

Laatste gedachten over e-mailprivacy in Git Commits

Het beschermen van uw persoonlijke gegevens is essentieel, vooral als u bijdraagt ​​aan openbare opslagplaatsen. Door uw Git-instellingen te configureren om een ​​privéadres te gebruiken en tools zoals git filter-branch En BFG Repo-Cleaner, kunt u persoonlijke gegevens effectief uit de commitgeschiedenis verwijderen. Hoewel repository-beheerders beperkte macht hebben om commit-informatie te wijzigen, kunnen ze privacypraktijken ondersteunen. Zorg er altijd voor dat u eventuele herschrijvingen van de geschiedenis met uw team communiceert om verwarring te voorkomen. Met deze methoden kunt u uw privacy behouden terwijl u bijdraagt ​​aan open-sourceprojecten.