更改GitHub用户名后如何保留提交归属?

6

我想要更新我的GitHub用户名,使其更加一致和易于辨认和其他网站和社交媒体。

根据GitHub文档

与您的GitHub提供的noreply电子邮件地址相关联的Git提交将不会归属于您的新用户名,并且不会出现在您的贡献图表中。 如果您的Git提交与您添加到GitHub帐户的其他电子邮件地址相关联,包括基于ID的GitHub提供的noreply电子邮件地址,则在更改用户名后它们仍将归属于您并出现在您的贡献图表中。 有关设置提交电子邮件地址的详细信息,请参见“设置提交电子邮件地址”。

这是什么意思?如果我理解正确,如果我更改我的用户名,我的提交就不会再归属于我了? “noreply电子邮件地址”和“基于ID的noreply电子邮件地址”的正确含义是什么? 如何确定我的提交是否与其中一个相关联?

换句话说,在更改我的用户名之前,该如何检查是否会失去我的提交属性?

请注意,我在本地工作,并且git config --list | grep email返回user.email=<my-real-email>@gmail.com


我不确定位于仓库根目录的.mailmap文件是否能帮助您实现所需的功能。https://improveandrepeat.com/2019/06/little-git-tricks-use-mailmap-to-merge-different-authors/ - Philippe
在本地克隆中:与提交一起存储的电子邮件是您在 git show <commit>git log 中看到的电子邮件。从技术上讲,有两个电子邮件,一个用于“作者”,另一个用于“提交者”;使用 git show --format=fullergit log --format=fuller 查看两者。在 GitHub 上:您可以在大多数显示提交的视图中看到电子邮件。 - LeGEC
2个回答

9
其他答案大多数回答了这个问题,但还有一个额外的考虑。取决于地址的形式,即使您一直在使用GitHub的no-reply电子邮件地址,您的提交也可以归属于您的新用户名。文档中的关键段落如下:
注意:如果您是在2017年7月18日之后创建的GitHub帐户,则您的GitHub提供的no-reply电子邮件地址是七位数字ID号和您的用户名,格式为ID+username@users.noreply.github.com。如果您在2017年7月18日之前创建了GitHub帐户,则GitHub提供的no-reply电子邮件地址是以username@users.noreply.github.com的形式显示的。您可以通过在电子邮件设置中选择(或取消选择并重新选择)保持我的电子邮件地址私有来获得基于ID的GitHub提供的no-reply电子邮件地址。
如果您使用GitHub提供的no-reply电子邮件地址进行提交,然后更改用户名,这些提交将不会与您的GitHub帐户相关联。如果您使用基于ID的GitHub提供的no-reply地址,则不适用此规则。有关更多信息,请参见“更改您的GitHub用户名”。
旧的no-reply地址基于用户名,因此与您的GitHub用户名相关联。如果您的提交使用了这样的地址,则它们将继续被归属于旧用户名,并且不会切换到新用户名。如果以后有人采用旧用户名,则这些提交将归属于该用户。
自2017年7月18日以来,GitHub通过向no-reply地址添加ID而更改了此功能。此ID现在与您的帐户相关联,并且与您的用户名无关。如果您有基于ID的地址,则更改用户名仍会将该地址的所有提交归属于您。但是,如果在发布基于ID的地址之前开始使用GitHub的no-reply电子邮件功能,则除非明确重新选择该选项(如注释所述),否则您将继续使用地址的旧格式。
总之,如果提交满足以下条件之一,它们将继续被归属于您的帐户:
1. 提交使用与您的GitHub帐户相关联的电子邮件地址。 2. 提交使用GitHub提供的基于ID的no-reply电子邮件地址。

2
Git要求在提交时嵌入作者和提交者字段的电子邮件地址。 这个值可以通过各种方式设置,但通常使用"user.email"来设置。 但是,由于存在垃圾邮件发送者,一些人不想在他们的提交中嵌入真实的电子邮件地址,因此GitHub提供了一个特殊的电子邮件地址,在域名“noreply.github.com”下,您可以使用它,并自动与您的帐户关联。 如果您在执行基于Web的操作时勾选指定的选项或在"user.email"中明确设置它,则会使用它。
假设您使用的是GitHub指定的非noreply电子邮件地址,当您重命名该地址时,所有贡献都将保留与您的帐户相关联。 查看的方法是进入每个存储库并运行“git log --format =%ae”以查看作者电子邮件,然后使用grep查找“noreply.github.com”域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接