Sådan fjerner du personlig e-mail fra Git Commits

Sådan fjerner du personlig e-mail fra Git Commits
Sådan fjerner du personlig e-mail fra Git Commits

Beskyttelse af dit e-mail-privatliv på GitHub

At få din personlige e-mail afsløret i GitHub-commits kan være et privatlivsproblem, især når du arbejder på offentlige arkiver. Hvis du har åbnet en pull request (PR), der er blevet flettet og bemærket, at din personlige e-mail er synlig, er det vigtigt at tage skridt til at skjule den.

I denne vejledning vil vi undersøge forskellige metoder til at fjerne eller skjule din e-mailadresse fra offentlig visning, efter at en PR er blevet flettet. Vi vil også diskutere, om vedligeholdere har mulighed for at ændre commit-oplysninger, og hvordan de kan ændre dine commits effektivt.

Kommando Beskrivelse
git filter-branch Omskriver commit-historikken for at ændre forfatter- og committerinformationen i Git-lageret.
export GIT_AUTHOR_NAME Indstiller forfatternavnet for de commits, der omskrives i filter-gren-operationen.
export GIT_AUTHOR_EMAIL Indstiller forfatter-e-mailen for de commits, der omskrives i filter-branch-operationen.
wget Downloader filer fra internettet, der bruges her til at downloade BFG Repo-Cleaner-værktøjet.
bfg-1.13.0.jar Java Archive-fil til BFG Repo-Cleaner, som forenkler processen med at rense depothistorik.
--replace-text BFG Repo-Cleaner-kommando til at erstatte specifik tekst (e-mail-adresser) i lagerhistorikken.
git reflog expire Udløber poster i reflog, hvilket er nyttigt til at rydde op i referencer til omskrevet historie.
git gc --prune=now Udfører affaldsopsamling og beskærer uopnåelige genstande med det samme, brugt efter omskrivning af historien.
git commit --amend Ændrer den seneste commit med nye forfatteroplysninger eller ændringer i commit-indholdet.

Fjernelse af personlig e-mail fra Git Commits

Scriptene gav hjælp til at fjerne personlige e-mail-oplysninger fra Git-commits, efter at en pull-anmodning er blevet flettet. Det første script bruger git filter-branch at omskrive begå historie. Denne kommando gentager hver commit og kontrollerer, om forfatterens eller committerens e-mail matcher den gamle e-mail. Hvis den gør det, erstatter den den med den nye, anonymiserede e-mail. Efter omskrivning af commit-historikken kræves der et force push for at opdatere fjernlageret. Det export GIT_AUTHOR_EMAIL og export GIT_COMMITTER_EMAIL kommandoer er afgørende her for at sikre, at de omskrevne commits har de korrekte e-mail-oplysninger.

Det andet script udnytter BFG Repo-Cleaner, som er et enklere og hurtigere alternativ til filter-gren. Ved at bruge --replace-text kommando, kan BFG erstatte alle forekomster af den gamle e-mail med den nye gennem hele lagerhistorikken. Efter udskiftning udfører scriptet en skraldesamling med git gc --prune=now for at rydde op i eventuelle resterende data. Det tredje script fokuserer på at ændre den seneste commit ved hjælp af git commit --amend, som tillader hurtige ændringer af forfatterinformationen uden at omskrive hele historien.

Brug af Git Filter-Branch til at omskrive forpligtelseshistorik

Brug af 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/*'

Brug af BFG Repo-Cleaner for nemmere fjernelse af e-mail

Brug af 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

Ændring af den sidste forpligtelse til e-mail-ændring

Brug af Git Command Line til 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

Sikring af privatlivets fred efter sammenlægning af en pull-anmodning

Et andet aspekt at overveje, når du forsøger at fjerne personlig e-mail fra Git commits, er brugen af GitHub’s personal email settings. Ved at konfigurere din Git-klient til at bruge en privat e-mailadresse leveret af GitHub, kan du undgå at afsløre din rigtige e-mail i fremtidige commits. Dette kan gøres ved at indstille din e-mail til formatet username@users.noreply.github.com. Derudover sikrer aktivering af e-mail-privatliv i GitHubs indstillinger, at din private e-mail bruges til webbaserede Git-operationer.

For commits, der allerede er blevet skubbet og fusioneret, har GitHubs vedligeholdere begrænset magt til at ændre historiske commit-data. De kan dog hjælpe ved at håndhæve arkivpolitikker, der tilskynder eller kræver, at bidragydere bruger private e-mails. I ekstreme tilfælde kan de hjælpe med at fjerne følsomme data, men dette involverer normalt omskrivning af historik, hvilket kan påvirke alle bidragydere.

Ofte stillede spørgsmål om privatliv via e-mail i Git Commits

  1. Hvordan kan jeg forhindre, at min e-mail bliver afsløret i fremtidige commits?
  2. Indstil din e-mail til username@users.noreply.github.com i din Git-konfiguration.
  3. Kan jeg ændre e-mailen for allerede pushede commits?
  4. Ja, du kan bruge git filter-branch eller BFG Repo-Cleaner for at omskrive commit-historikken og ændre e-mailen.
  5. Hvad er den nemmeste måde at skjule min e-mail i fremtidige commits?
  6. Konfigurer din GitHub-konto til at bruge en privat e-mail, og indstil din Git-klients e-mail til username@users.noreply.github.com.
  7. Ændrer en ændring af en forpligtelse dens historie?
  8. Ja, git commit --amend ændrer den seneste commit, som kan tvangsskubbes for at opdatere depotet.
  9. Kan lagervedligeholdere ændre mine commit-oplysninger?
  10. Vedligeholdere har begrænset mulighed for at ændre commit-historik, men kan håndhæve privatlivspolitikker for fremtidige commits.
  11. Er det sikkert at omskrive forpligtelseshistorien?
  12. Omskrivning af historie kan påvirke samarbejdet, så det bør gøres omhyggeligt, ideelt set i et kontrolleret miljø.
  13. Hvad er virkningen af ​​force-pushing ændringer?
  14. Force-pushing kan overskrive historien, hvilket kan forvirre samarbejdspartnere, så kommuniker tydeligt, før du gør det.
  15. Kan e-mail-privatliv håndhæves på tværs af en hel organisation?
  16. Ja, GitHub-organisationer kan indstille politikker og bruge værktøjer som f.eks pre-commit hooks for at sikre e-mail privatliv.
  17. Hvad er pre-commit kroge?
  18. Pre-commit hooks er scripts, der kører før en commit oprettes, hvilket sikrer, at den opfylder visse kriterier som f.eks. at bruge en privat e-mail.

Endelige tanker om e-mail-privatliv i Git Commits

Det er vigtigt at beskytte dine personlige oplysninger, især når du bidrager til offentlige arkiver. Ved at konfigurere dine Git-indstillinger til at bruge en privat adresse og bruge værktøjer som git filter-branch og BFG Repo-Cleaner, kan du effektivt fjerne personlige data fra forpligtelseshistorikken. Mens lagervedligeholdere har begrænset magt til at ændre commit-oplysninger, kan de understøtte privatlivspraksis. Sørg altid for at kommunikere eventuelle historieomskrivninger med dit team for at undgå forvirring. Med disse metoder kan du bevare dit privatliv, mens du bidrager til open source-projekter.