Hur man tar bort personlig e-post från Git Commits

Hur man tar bort personlig e-post från Git Commits
Hur man tar bort personlig e-post från Git Commits

Skydda din e-postsekretess på GitHub

Att ha din personliga e-post exponerad i GitHub-commits kan vara ett integritetsproblem, särskilt när du arbetar med offentliga arkiv. Om du har öppnat en pull request (PR) som har slagits samman och märkt att din personliga e-post är synlig är det viktigt att du vidtar åtgärder för att dölja den.

I den här guiden kommer vi att undersöka olika metoder för att ta bort eller dölja din e-postadress från allmän synpunkt efter att en PR har slagits samman. Vi kommer också att diskutera huruvida underhållare har förmågan att ändra åtagandeinformation och hur man kan ändra dina åtaganden på ett effektivt sätt.

Kommando Beskrivning
git filter-branch Skriver om commit-historik för att ändra författaren och committerinformationen i Git-förvaret.
export GIT_AUTHOR_NAME Ställer in författarens namn för commits som skrivs om i filter-branch-operationen.
export GIT_AUTHOR_EMAIL Ställer in författarens e-postadress för commits som skrivs om i filter-branch-operationen.
wget Laddar ner filer från internet, som används här för att ladda ner BFG Repo-Cleaner-verktyget.
bfg-1.13.0.jar Java Archive-fil för BFG Repo-Cleaner, som förenklar processen att rensa förvarshistorik.
--replace-text BFG Repo-Cleaner-kommando för att ersätta specifik text (e-postadresser) i förvarshistoriken.
git reflog expire Förfaller poster i återloggningen, vilket är användbart för att rensa upp referenser till omskriven historia.
git gc --prune=now Utför sophämtning och beskär oåtkomliga föremål omedelbart, som används efter att ha skrivit om historien.
git commit --amend Ändrar den senaste commit med information om ny författare eller ändringar i commit-innehållet.

Ta bort personlig e-post från Git Commits

Skripten tillhandahöll hjälp med att ta bort personlig e-postinformation från Git commits efter att en pull-begäran har slagits samman. Det första skriptet använder git filter-branch att skriva om begå historien. Detta kommando itererar genom varje commit och kontrollerar om författarens eller committers e-postadress matchar det gamla e-postmeddelandet. Om den gör det, ersätter den den med den nya, anonymiserade e-posten. Efter att ha skrivit om commit-historiken krävs en force push för att uppdatera fjärrlagret. De export GIT_AUTHOR_EMAIL och export GIT_COMMITTER_EMAIL kommandon är avgörande här för att säkerställa att de omskrivna commits har rätt e-postinformation.

Det andra skriptet utnyttjar BFG Repo-Cleaner, vilket är ett enklare och snabbare alternativ till filtergren. Genom att använda --replace-text kommandot, kan BFG ersätta alla instanser av det gamla e-postmeddelandet med det nya genom hela förvarshistoriken. Efter byte utför manuset en sophämtning med git gc --prune=now för att rensa upp eventuella restdata. Det tredje skriptet fokuserar på att ändra den senaste commit med hjälp av git commit --amend, vilket möjliggör snabba ändringar av författarens information utan att skriva om hela historien.

Använda Git Filter-Branch för att skriva om åtagandehistorik

Använda 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/*'

Använda BFG Repo-Cleaner för enklare e-postborttagning

Använder 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 av den senaste åtagandet för e-poständring

Använda Git Command Line för 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

Säkerställa sekretess efter sammanslagning av en Pull-förfrågan

En annan aspekt att tänka på när man försöker ta bort personlig e-post från Git commits är användningen av GitHub’s personal email settings. Genom att konfigurera din Git-klient att använda en privat e-postadress som tillhandahålls av GitHub, kan du undvika att exponera din riktiga e-post i framtida commits. Detta kan göras genom att ställa in din e-post till formatet username@users.noreply.github.com. Att aktivera e-postsekretess i GitHubs inställningar säkerställer dessutom att din privata e-post används för webbaserade Git-operationer.

För åtaganden som redan har pushats och sammanslagits har GitHubs underhållare begränsad makt att ändra historiska åtagandedata. Däremot kan de hjälpa till genom att upprätthålla arkivpolicyer som uppmuntrar eller kräver att bidragsgivare använder privata e-postmeddelanden. I extrema fall kan de hjälpa till att ta bort känsliga uppgifter, men detta innebär vanligtvis omskrivning av historiken, vilket kan påverka alla bidragsgivare.

Vanliga frågor om e-postsekretess i Git Commits

  1. Hur kan jag förhindra att min e-post exponeras i framtida commits?
  2. Ställ in din e-post till username@users.noreply.github.com i din Git-konfiguration.
  3. Kan jag ändra e-postadressen för redan pushade bekräftelser?
  4. Ja, du kan använda git filter-branch eller BFG Repo-Cleaner för att skriva om bekräftelsehistorik och ändra e-postmeddelandet.
  5. Vad är det enklaste sättet att dölja min e-post i framtida commits?
  6. Konfigurera ditt GitHub-konto för att använda en privat e-post och ställ in din Git-klients e-post till username@users.noreply.github.com.
  7. Ändrar en ändring av ett åtagande dess historia?
  8. Ja, git commit --amend ändrar den senaste commit, som kan tvingas fram för att uppdatera arkivet.
  9. Kan arkivunderhållare ändra min commit-information?
  10. Underhållare har begränsad möjlighet att ändra bekräftelsehistorik men kan upprätthålla sekretesspolicyer för framtida åtaganden.
  11. Är det säkert att skriva om begåvningshistoriken?
  12. Att skriva om historien kan påverka samarbetet, så det bör göras försiktigt, helst i en kontrollerad miljö.
  13. Vad är effekten av kraftpådrivande förändringar?
  14. Force-pushing kan skriva över historik, vilket kan förvirra medarbetare, så kommunicera tydligt innan du gör det.
  15. Kan e-postsekretess upprätthållas i en hel organisation?
  16. Ja, GitHub-organisationer kan ställa in policyer och använda verktyg som pre-commit hooks för att säkerställa e-postsekretess.
  17. Vad är pre-commit krokar?
  18. Pre-commit hooks är skript som körs innan en commit skapas, vilket säkerställer att den uppfyller vissa kriterier som att använda ett privat e-postmeddelande.

Sista tankar om e-postsekretess i Git Commits

Det är viktigt att skydda din personliga information, särskilt när du bidrar till offentliga arkiv. Genom att konfigurera dina Git-inställningar för att använda en privat adress och använda verktyg som git filter-branch och BFG Repo-Cleaner, kan du effektivt ta bort personlig information från historiken. Även om lagerhållare har begränsad makt att ändra commit-information, kan de stödja sekretesspraxis. Se alltid till att kommunicera eventuella historieskrivningar med ditt team för att undvika förvirring. Med dessa metoder kan du behålla din integritet samtidigt som du bidrar till projekt med öppen källkod.