` 输出中删除我的私有(private)电子邮件?-6ren"> ` 输出中删除我的私有(private)电子邮件?-我正在浏览这篇文章:https://help.github.com/articles/changing-author-info/ . 请注意文章顶部的警告:“警告:此操作会破坏您的存储库的历史记录。如-6ren">
gpt4 book ai didi

git - 如何从 `git log --all --format="%aN <%ae>` 输出中删除我的私有(private)电子邮件?

转载 作者:太空狗 更新时间:2023-10-29 14:10:15 25 4
gpt4 key购买 nike

我正在浏览这篇文章:https://help.github.com/articles/changing-author-info/ .

请注意文章顶部的警告:“警告:此操作会破坏您的存储库的历史记录。如果您与其他人在存储库上进行协作,则重写已发布的历史记录被认为是不好的做法。您应该只执行此操作在紧急情况下。”遗憾的是,似乎没有一种方法可以重写历史记录,只能重写电子邮件和/或作者姓名。感谢 GitHub 为未经请求的电子邮件提供了一个载体,而无法改变这一点!下一个最佳选择似乎是更改电子邮件,通知重要联系人,并且不启用从旧电子邮件转发到新电子邮件。如果您选择使用此选项,那么您可能还希望仅对联系人中的人启用自动回复(Gmail 中提供的一项功能,其他电子邮件提供商不确定),例如:

Due to getting too many emails, including many unsolicited ones, I have changed my email address and no longer actively monitor this one. If you wish to contact me about something that is very likely to be of interest to me, then please contact me via <insert some communication medium, e.g. a contact form on a page on your website with social media links or your https://about.me page>

我将在此处重现这些步骤:

运行:

# 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.shgar.sh )到 repo.git使用以下脚本替换 OLD_EMAIL 的目录, CORRECT_NAMECORRECT_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.

为脚本添加执行权限:chmod +x gar.sh .运行脚本:./gar.sh .

运行脚本并使用 git log --all --format="%aN <%ae>" | sort -u 检查所有分支的历史记录后它仍然显示我的私有(private)电子邮件地址。我收到垃圾邮件(在某些情况下,人们甚至提到“我注意到你为 X repo 做出了贡献”),并且一直小心避免公开列出我的电子邮件(提交历史除外,直到我更改为不使用我的私有(private) email on GitHub )。所以我需要在所有分支中运行这个脚本。但是,如果 --all,我的私有(private)电子邮件已从输出中删除选项已删除。

脚本的输出包括一些“警告:Ref refs/heads/some_branch 未更改”行,尽管有许多“Ref 'refs/heads/some-branch-name' 已被重写”。

如何从 git log --all --format="%aN <%ae>" | sort -u 中删除我的私有(private)电子邮件输出?编辑:使用 git log --exclude="refs/original" --all --format="%aN <%ae>" | sort -u正如第一个答案中所建议的。

我不知道为什么,但你需要运行脚本两次,因为在运行脚本后运行上面的日志命令后,它仍然输出我的私有(private)电子邮件。我猜测第二次运行会覆盖备份并且日志命令没有正确排除所有备份。

TODO:尝试 git log --exclude="refs/original/*" --all --format="%aN <%ae>" | sort -u

编辑:在将更改推送到源远程(甚至是上游)后,它正在更改文件,我不确定为什么,也不知道如何修复它。

我也已就此向 GitHub 发送反馈,并将更新他们的回复。但是,也许这里有人可以帮助我。

最佳答案

尝试在末尾添加 -- --all 的相同 git filter-branch 命令:这会处理分支和标签,但也会处理远程引用。

然后检查你的git log --all

的结果

另请注意,使用过滤器分支时,原始引用(如果与重写的引用不同)将存储在命名空间 refs/original/ 中:确保您的 git log - -all 不列出那些 refs (refs/original):它们仍然会引用您的旧电子邮件。

关于git - 如何从 `git log --all --format="%aN <%ae>` 输出中删除我的私有(private)电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com