Slik fjerner du personlig e-post fra Git Commits

Slik fjerner du personlig e-post fra Git Commits
Slik fjerner du personlig e-post fra Git Commits

Beskytt e-postpersonvernet ditt på GitHub

Å ha din personlige e-post eksponert i GitHub-commits kan være et personvernproblem, spesielt når du jobber med offentlige depoter. Hvis du har åpnet en pull request (PR) som er slått sammen og lagt merke til at din personlige e-post er synlig, er det viktig å ta skritt for å skjule den.

I denne veiledningen vil vi utforske ulike metoder for å fjerne eller skjule e-postadressen din fra offentlig visning etter at en PR har blitt slått sammen. Vi vil også diskutere om vedlikeholdere har muligheten til å endre forpliktelsesinformasjon og hvordan de kan endre forpliktelsene dine effektivt.

Kommando Beskrivelse
git filter-branch Omskriver commit-historikk for å endre forfatter- og committerinformasjonen i Git-depotet.
export GIT_AUTHOR_NAME Angir forfatternavnet for forpliktelsene som skrives om i filter-gren-operasjonen.
export GIT_AUTHOR_EMAIL Angir forfatter-e-postadressen for forpliktelsene som skrives om i filter-gren-operasjonen.
wget Laster ned filer fra internett, brukt her for å laste ned BFG Repo-Cleaner-verktøyet.
bfg-1.13.0.jar Java Archive-fil for BFG Repo-Cleaner, som forenkler prosessen med å rense depothistorikk.
--replace-text BFG Repo-Cleaner-kommando for å erstatte spesifikk tekst (e-postadresser) i depothistorikken.
git reflog expire Utløper oppføringer i reflog, som er nyttig for å rydde opp i referanser til omskrevet historie.
git gc --prune=now Utfører søppelinnsamling og beskjærer uoppnåelige gjenstander umiddelbart, brukt etter omskrivning av historien.
git commit --amend Endrer den siste forpliktelsen med ny forfatterinformasjon eller endringer i forpliktelsens innhold.

Fjerner personlig e-post fra Git Commits

Skriptene ga hjelp til å fjerne personlig e-postinformasjon fra Git commits etter at en pull-forespørsel har blitt slått sammen. Det første skriptet bruker git filter-branch å omskrive forpliktelseshistorien. Denne kommandoen går gjennom hver commit, og sjekker om forfatterens eller committerens e-post samsvarer med den gamle e-posten. Hvis den gjør det, erstatter den den med den nye, anonymiserte e-posten. Etter å ha omskrevet commit-historikken, kreves et force push for å oppdatere det eksterne depotet. De export GIT_AUTHOR_EMAIL og export GIT_COMMITTER_EMAIL kommandoer er avgjørende her for å sikre at de omskrevne forpliktelsene har riktig e-postinformasjon.

Det andre skriptet utnytter BFG Repo-Cleaner, som er et enklere og raskere alternativ til filtergren. Ved å bruke --replace-text kommandoen, kan BFG erstatte alle forekomster av den gamle e-posten med den nye gjennom hele depothistorikken. Etter utskifting utfører manuset en søppelsamling med git gc --prune=now for å rydde opp i eventuelle gjenværende data. Det tredje skriptet fokuserer på å endre den siste forpliktelsen ved å bruke git commit --amend, som tillater raske endringer i forfatterinformasjonen uten å omskrive hele historien.

Bruke Git Filter-Branch for å omskrive forpliktelseshistorikk

Bruke Shell Scripting med 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/*'

Bruke BFG Repo-Cleaner for enklere fjerning av e-post

Bruker Java med 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

Endring av siste forpliktelse for e-postendring

Bruke Git Command Line for Simple Amend

# 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

Sikre personvern etter sammenslåing av en pull-forespørsel

Et annet aspekt å vurdere når du prøver å fjerne personlig e-post fra Git commits er bruken av GitHub’s personal email settings. Ved å konfigurere Git-klienten din til å bruke en privat e-postadresse levert av GitHub, kan du unngå å avsløre den virkelige e-posten din i fremtidige commits. Dette kan gjøres ved å sette e-posten din til formatet username@users.noreply.github.com. I tillegg, aktivering av e-postvern i GitHubs innstillinger sikrer at din private e-post brukes til nettbaserte Git-operasjoner.

For forpliktelser som allerede har blitt presset og slått sammen, har GitHubs vedlikeholdere begrenset makt til å endre historiske forpliktelsesdata. De kan imidlertid hjelpe ved å håndheve retningslinjer for depot som oppmuntrer eller krever at bidragsytere bruker private e-poster. I ekstreme tilfeller kan de hjelpe til med å fjerne sensitive data, men dette innebærer vanligvis omskriving av historikk, noe som kan påvirke alle bidragsytere.

Ofte stilte spørsmål om personvern for e-post i Git Commits

  1. Hvordan kan jeg forhindre at e-posten min blir eksponert i fremtidige forpliktelser?
  2. Sett e-posten din til username@users.noreply.github.com i Git-konfigurasjonen din.
  3. Kan jeg endre e-posten for allerede pushede forpliktelser?
  4. Ja, du kan bruke git filter-branch eller BFG Repo-Cleaner for å omskrive forpliktelseshistorikk og endre e-posten.
  5. Hva er den enkleste måten å skjule e-posten min på i fremtidige forpliktelser?
  6. Konfigurer GitHub-kontoen din til å bruke en privat e-post, og sett Git-klientens e-post til username@users.noreply.github.com.
  7. Endrer det å endre en forpliktelse historien?
  8. Ja, git commit --amend endrer den siste commit, som kan tvinges for å oppdatere depotet.
  9. Kan repository-vedlikeholdere endre commit-informasjonen min?
  10. Vedlikeholdere har begrenset mulighet til å endre forpliktelseshistorikk, men kan håndheve personvernregler for fremtidige forpliktelser.
  11. Er det trygt å omskrive forpliktelseshistorien?
  12. Omskriving av historie kan påvirke samarbeidet, så det bør gjøres forsiktig, ideelt sett i et kontrollert miljø.
  13. Hva er virkningen av kraftpådrivende endringer?
  14. Force-pushing kan overskrive historien, noe som kan forvirre samarbeidspartnere, så kommuniser tydelig før du gjør det.
  15. Kan personvern for e-post håndheves på tvers av en hel organisasjon?
  16. Ja, GitHub-organisasjoner kan sette retningslinjer og bruke verktøy som pre-commit hooks for å sikre personvern for e-post.
  17. Hva er pre-commit kroker?
  18. Pre-commit hooks er skript som kjører før en commit opprettes, og sikrer at den oppfyller visse kriterier som å bruke en privat e-post.

Siste tanker om personvern for e-post i Git Commits

Det er viktig å beskytte din personlige informasjon, spesielt når du bidrar til offentlige depoter. Ved å konfigurere Git-innstillingene dine til å bruke en privat adresse og bruke verktøy som git filter-branch og BFG Repo-Cleaner, kan du effektivt fjerne personlige data fra forpliktelsesloggen. Selv om depotansvarlige har begrenset makt til å endre forpliktelsesinformasjon, kan de støtte personvernpraksis. Sørg alltid for å kommunisere eventuelle historieomskrivinger med teamet ditt for å unngå forvirring. Med disse metodene kan du opprettholde personvernet ditt mens du bidrar til åpen kildekode-prosjekter.