首页 > 解决方案 > .mailmap:您可以只匹配名称、不匹配电子邮件还是使用通配符电子邮件?

问题描述

第三方贡献者使用他们的工作电子邮件地址和个人电子邮件地址进行了提交。我们正在使用一个.mailmap文件,它们被映射到他们的工作邮件。他们现在在工作邮件中收到垃圾邮件,因为垃圾邮件发送者正在.mailmapGitHub 上收集文件。他们已要求从.mailmap文件中删除。

.mailmap文件仍会在 git 历史记录中,但至少不会再出现HEAD了。这是我们能做的最好的事情,不会git-filter-branchgit push --force很多很多分叉不开心。

的通用格式.mailmap为:

Name you want to keep <email you want to keep> Name you no longer want <email you no longer want>

这些也是有效的:

Name you want to keep <email you want to keep> <email you no longer want>

Name you want to keep <email you want to keep>

但这也是一种有效的格式吗?

Name you want to keep <email you want to keep> Name you no longer want

因为这样我们就可以将他们的名字映射到类似的东西<name@invalid>,而不用在.mailmap文件中包含他们的电子邮件。

我已经尝试过了,然后做了一个git log --use-mailmap,我仍然得到了旧的电子邮件地址。

我也试过

Name you want to keep <email you want to keep> <>

Name you want to keep <email you want to keep> <*>

Name you want to keep <email you want to keep> <.*>

Name you want to keep <email you want to keep> <**>

这些都不起作用。唯一有效的情况是,当有一个与提交中的电子邮件地址完全匹配的真实电子邮件地址时,我不想在.mailmap文件中使用真实的电子邮件地址。

标签: git

解决方案


Git 的.mailmap文件不支持通配符,并且无法将电子邮件地址映射为空,因为提交需要电子邮件地址。

您查询的语法是有效的,但是它将用户的名称从旧名称重写为新名称,而不是没有电子邮件的格式。

如果您的目标是将用户的工作地址映射到其他东西(或什么都没有)而不在文件中列出,那是不可能的,因为查找主要由提交对象本身中的电子邮件地址键入。您和用户都应该知道,如果您只是从.mailmap文件中删除地址,这不会阻止垃圾邮件,因为垃圾邮件发送者也会从存储库中获取电子邮件地址(通过其他方式),因此他们可以找到位于原始提交。因此,除了总是使用一次性地址(如 GitHub 提供)或针对垃圾邮件发送者的积极诉讼之外,没有办法阻止至少一些地址的收集。


推荐阅读