git - 如何从 `git log --all --format="%aN <%ae>` 输出中删除我的私人电子邮件?
问题描述
我正在阅读这篇文章:https ://help.github.com/articles/changeing-author-info/ 。
请注意文章顶部的警告:“警告:此操作会破坏您的存储库的历史记录。如果您正在与其他人协作处理存储库,则重写已发布的历史记录被认为是不好的做法。您应该只在紧急情况下这样做。” '很遗憾,似乎没有办法重写历史,只重写电子邮件和/或作者姓名。感谢 GitHub 为不请自来的电子邮件提供了一个矢量,但无法更改这一点!似乎下一个最佳选择是更改电子邮件,通知重要联系人,并且不启用从旧电子邮件转发到新电子邮件。如果您选择使用此选项,那么您可能还希望仅对您联系人中的人启用自动回复(Gmail 中提供的一项功能,不确定其他电子邮件提供商),例如:
由于收到了太多的电子邮件,包括许多不请自来的电子邮件,我已经更改了我的电子邮件地址,并且不再积极监控这封邮件。如果您想就我很可能感兴趣的事情与我联系,请通过<插入一些通讯媒介与我联系,例如您网站页面上带有社交媒体链接的联系表或您的https:// about.me页面>
我将在这里重现这些步骤:
跑:
# It is simplest if you use a repo that you have
# already contributed to.
git clone --bare https://github.com/user/repo.git
cd repo.git
使用以下脚本将文件(称为git-author-rewrite.sh
或gar.sh
)添加到目录中,替换,并使用适当的值:repo.git
OLD_EMAIL
CORRECT_NAME
CORRECT_EMAIL
#!/bin/sh
# gar is short for git-author-rewrite
git filter-branch -f --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.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 -- --exclude="refs/original" --all
# originally this had `-- --branches --tags`, but has been revised as
# per the answer below, and a -f also added.
为脚本添加 exec 权限:chmod +x gar.sh
. 运行脚本:./gar.sh
.
在运行脚本并使用它检查所有分支的历史记录后,git log --all --format="%aN <%ae>" | sort -u
它仍然显示我的私人电子邮件地址。我收到垃圾邮件(在某些情况下,人们甚至提到“我注意到你为 X repo 做出了贡献”),并且一直小心避免公开列出我的电子邮件(提交历史除外,直到我更改为不使用我的GitHub 上的私人电子邮件)。所以我需要在所有分支中运行这个脚本。--all
但是,如果删除该选项,我的私人电子邮件已从输出中删除。
脚本的输出包括一些“警告:参考未refs/heads/some_branch
更改”行,尽管有许多“参考 'refs/heads/some-branch-name' 已重写”。
如何从git log --all --format="%aN <%ae>" | sort -u
输出中删除我的私人电子邮件?编辑:git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u
按照第一个答案中的建议使用。
我不确定为什么,但是您需要运行脚本两次,因为在运行脚本后运行上述日志命令后,它仍然会输出我的私人电子邮件。我猜第二次运行会覆盖备份,并且 log 命令没有正确排除所有备份。
待办事项:尝试git log --exclude="refs/original/*" --all --format="%aN <%ae>" | sort -u
编辑:在将更改推送到原始远程(甚至是上游)之后,它正在更改文件,我不知道为什么,也不知道如何修复它。
我还就此向 GitHub 发送了反馈,并将根据他们的回复进行更新。但是,也许这里有人可以帮助我。
解决方案
-- --all
在末尾尝试相同的 git filter-branch 命令:它会处理分支和标签,但也会处理远程引用。
然后检查你的结果git log --all
另请注意,使用过滤器分支,如果原始 refs 与重写的不同,将存储在命名空间中refs/original/
:确保您git log --all
没有列出那些 refs ( refs/original
):它们仍会引用您的旧电子邮件。
推荐阅读
- vba - 试图从连接的字符串中收集日期
- python - 对数据框列进行计算的最优雅方法
- amazon-web-services - 如何从 S3 下载大型 csv 文件而不会遇到“内存不足”问题?
- jquery - 如何在 jquery 中使用 php for 循环 for fullcalender.js 和 laravel?
- dataframe - 转置后的 Data.frame 和 data.frame 仍然将变量作为非数字
- python - AttributeError:“模块”对象没有属性“HTTPError”
- c# - 如何 P/invoke double*
- javascript - 表单发布数据 - 保存到 Cookie - 从 Cookie 中读取
- aws-lambda - 使用 VPC 配置 AWS Lambda 意味着什么?
- python - 为什么我的文件在使用 endwith() 时无法识别