如何从 Git 提交中删除个人电子邮件

如何从 Git 提交中删除个人电子邮件
如何从 Git 提交中删除个人电子邮件

保护您在 GitHub 上的电子邮件隐私

在 GitHub 提交中暴露您的个人电子邮件可能会引起隐私问题,尤其是在公共存储库上工作时。如果您打开了已合并的拉取请求 (PR),并发现您的个人电子邮件可见,那么采取措施隐藏它很重要。

在本指南中,我们将探讨在合并 PR 后从公众视野中删除或隐藏您的电子邮件地址的各种方法。我们还将讨论维护者是否有能力更改提交信息以及如何有效地修改您的提交。

命令 描述
git filter-branch 重写提交历史记录以更改 Git 存储库中的作者和提交者信息。
export GIT_AUTHOR_NAME 设置在过滤分支操作中重写的提交的作者姓名。
export GIT_AUTHOR_EMAIL 设置在过滤分支操作中重写的提交的作者电子邮件。
wget 从互联网下载文件,此处用于下载 BFG Repo-Cleaner 工具。
bfg-1.13.0.jar BFG Repo-Cleaner 的 Java 存档文件,简化了清理存储库历史记录的过程。
--replace-text BFG Repo-Cleaner 命令用于替换存储库历史记录中的特定文本(电子邮件地址)。
git reflog expire 使引用日志中的条目过期,这对于清理对重写历史记录的引用很有用。
git gc --prune=now 立即执行垃圾收集并修剪无法访问的对象,在重写历史记录后使用。
git commit --amend 使用新的作者信息或对提交内容的更改来修改最近的提交。

从 Git 提交中删除个人电子邮件

这些脚本有助于在合并拉取请求后从 Git 提交中删除个人电子邮件信息。第一个脚本使用 git filter-branch 重写提交历史记录。此命令循环访问每个提交,检查作者或提交者电子邮件是否与旧电子邮件匹配。如果是,它会将其替换为新的匿名电子邮件。重写提交历史记录后,需要强制推送来更新远程存储库。这 export GIT_AUTHOR_EMAILexport GIT_COMMITTER_EMAIL 命令对于确保重写的提交具有正确的电子邮件信息至关重要。

第二个脚本利用 BFG Repo-Cleaner,这是过滤器分支的更简单、更快的替代方案。通过使用 --replace-text 命令,BFG 可以在整个存储库历史记录中用新电子邮件替换旧电子邮件的所有实例。替换后,脚本执行垃圾收集 git gc --prune=now 清理任何残留数据。第三个脚本重点是使用修改最近的提交 git commit --amend,它允许快速更改作者信息,而无需重写整个历史记录。

使用 Git Filter-Branch 重写提交历史记录

将 Shell 脚本与 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/*'

使用 BFG Repo-Cleaner 更轻松地删除电子邮件

将 Java 与 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

修改电子邮件更改的最后一次提交

使用Git命令行进行简单修改

# 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

合并拉取请求后确保隐私

尝试从 Git 提交中删除个人电子邮件时要考虑的另一个方面是使用 GitHub’s personal email settings。通过将 Git 客户端配置为使用 GitHub 提供的私人电子邮件地址,您可以避免在将来的提交中暴露您的真实电子邮件。这可以通过将您的电子邮件设置为以下格式来完成 username@users.noreply.github.com。此外,在 GitHub 设置中启用电子邮件隐私可确保您的私人电子邮件用于基于 Web 的 Git 操作。

对于已经推送和合并的提交,GitHub 的维护者更改历史提交数据的权力有限。但是,他们可以通过执行鼓励或要求贡献者使用私人电子邮件的存储库策略来提供帮助。在极端情况下,它们可能会协助删除敏感数据,但这通常涉及重写历史记录,这可能会影响所有贡献者。

有关 Git 提交中电子邮件隐私的常见问题解答

  1. 如何防止我的电子邮件在将来的提交中被暴露?
  2. 将您的电子邮件设置为 username@users.noreply.github.com 在你的 Git 配置中。
  3. 我可以更改已推送提交的电子邮件吗?
  4. 是的,您可以使用 git filter-branch 或者 BFG Repo-Cleaner 重写提交历史记录并更改电子邮件。
  5. 在将来的提交中隐藏我的电子邮件的最简单方法是什么?
  6. 配置您的 GitHub 帐户以使用私人电子邮件,并将 Git 客户端的电子邮件设置为 username@users.noreply.github.com
  7. 修改提交会改变它的历史吗?
  8. 是的, git commit --amend 更改最近的提交,可以强制推送该提交以更新存储库。
  9. 存储库维护者可以更改我的提交信息吗?
  10. 维护者更改提交历史的能力有限,但可以为未来的提交强制执行隐私策略。
  11. 重写提交历史安全吗?
  12. 重写历史记录可能会影响协作,因此应该谨慎进行,最好是在受控环境中进行。
  13. 强制推动变革会产生什么影响?
  14. 强制推送可能会覆盖历史记录,这可能会让协作者感到困惑,因此在执行此操作之前请先进行清楚的沟通。
  15. 电子邮件隐私可以在整个组织中强制执行吗?
  16. 是的,GitHub 组织可以设置策略并使用诸如 pre-commit hooks 以确保电子邮件隐私。
  17. 什么是预提交挂钩?
  18. 预提交挂钩是在创建提交之前运行的脚本,确保它满足某些标准,例如使用私人电子邮件。

关于 Git 提交中电子邮件隐私的最终想法

保护您的个人信息至关重要,尤其是在向公共存储库做出贡献时。通过配置您的 Git 设置以使用私有地址并利用诸如 git filter-branchBFG Repo-Cleaner,您可以有效地从提交历史记录中删除个人数据。虽然存储库维护者更改提交信息的权力有限,但他们可以支持隐私实践。始终确保与您的团队沟通任何历史重写,以避免混乱。通过这些方法,您可以在为开源项目做出贡献的同时维护您的隐私。