Git是否会公开展示我的电子邮件地址?

138

到目前为止,我所阅读的有关Git的指南都说我应该进入配置文件并指定我的姓名和电子邮件地址。他们没有详细说明; 他们只是让我这样做。

Git为什么需要我的电子邮件地址?更重要的是,如果我通过GitHub等方式将我的存储库公开可用,我的电子邮件地址是否会对所有人(包括垃圾邮件机器人)可见?


28
我认为这是一个关于编程工具的有效(虽然非技术性)问题 - 就像SO上的许多其他问题一样 - 并且不应该因为“与编程无关”而被投票为负。 - Jonik
4
GitHub现在(2013年8月)允许您保持电子邮件地址的私密性!请查看我在下面的回答。您还可以注册一个虚假的电子邮件地址,以便在将提交推送到GitHub时不使用真实的电子邮件地址。 - VonC
9个回答

64

2017年4月更新:

请看“私人电子邮件更加私密

GitHub支持使用备用的“noreply”电子邮件地址,用于作者基于Web的提交已有一段时间了。从今天开始,有另一种方法可以确保在通过命令行将提交推送到GitHub时不会无意中发布您的电子邮件地址。

Git使用您的电子邮件地址将您的名称与您撰写的任何提交相关联。一旦您将提交推送到GitHub上的公共存储库,作者元数据也会被发布。

如果您想确保您不会意外地发布您的电子邮件地址,只需在电子邮件设置中选中“保持我的电子邮件地址私有”和“阻止命令行推送暴露我的电子邮件”的选项。

https://cloud.githubusercontent.com/assets/33750/24673856/a995cb74-1947-11e7-8653-65bc604a4101.png

注意:如下评论所述orevGit没有暴露任何内容。 GitHub是Git存储库托管服务,可能会暴露元数据。
您推送本地Git存储库的位置可以公开元数据。


注意:从2013年8月9日开始,您现在可以保持电子邮件地址私有

不过这只是针对基于Web的GitHub操作:提交仍包含一个电子邮件地址,该地址可能与用于您的GitHub帐户的电子邮件地址相同或不同。
请参阅下面以“掩盖”(git commit)电子邮件为例。

直到今天,所有基于Web的GitHub Flow都使用您的主要电子邮件地址。这包括创建、编辑和删除文件,以及合并拉取请求。

但现在您可以保持您的电子邮件地址私有。要这样做,请访问您的电子邮件设置页面:

email settings

打开此选项后,Web操作将使用username@users.noreply.github.com电子邮件地址。


如果您想隐藏从计算机生成的电子邮件,请注意GitHub现在允许您注册不同的电子邮件地址:请参阅本指南

如果要使提交反映出来,您仍然需要在将其推回GitHub之前在本地存储库中配置您的(虚假)电子邮件。

git config --global user.email "user@server.fake" # Set email to slightly changed value
git config --global user.email # Verify the setting
# user@server.fake

然后:

  • 进入邮件设置菜单
  • 点击“添加另一个电子邮件地址”
  • 输入虚假电子邮件(例如“user@server.fake”)并单击“添加”

添加新电子邮件地址

请注意:

此设置仅影响将来的提交
如果您想从代码库的提交历史中删除真实的电子邮件地址,您需要重写旧的提交。最简单的方法是:

使用git filter-branch 来重写存储库历史记录并强制推送新历史记录。


4
这很有用,不过我认为应该非常清楚地指出GitHubgit不是同一回事。git是一种通用的开源版本控制工具,而GitHub是一个网站,可以让你发布git存储库。GitHub并没有创造git,他们只是恰好创建了一个与之配合得很好的优秀网站。 - orev
@orev 好观点。我已经在答案中包含了那个警告。 - VonC
@VonC,默认情况下,设置(有关“但现在您可以保持电子邮件地址的隐私。要这样做”)是否被默认选中了? - Pacerier
根据这个指南,@Pacerier并不是这样的。 - VonC

46

Git使用您的电子邮件地址来识别您,以及执行其他任务(例如使用GPG密钥签署标签)。您的电子邮件地址会与您指定的名称一起嵌入提交日志等中作为您身份的一部分。例如,在提交日志中,“作者”字段将显示为:

Author: Joe White <joewhite@mysite.com>

因此,只要拥有存储库的副本,任何人都可以访问这些信息,因为它充当标识符。

但是,除非您使用Gitweb或像GitHub这样的服务通过Web界面使您的存储库可用(仅将其放在Internet上不会实现此操作),否则您的电子邮件可能不会对垃圾邮件机器人可见。

我想,您可以填写虚假的电子邮件地址或使用空字符串或空格之类的内容(我不认为Git检查电子邮件的格式或有效性),但是如果克隆存储库的某个人需要发送补丁或以某种方式联系您,则电子邮件很有用。


5
可以说 Github、Gitweb等工具应该提供像邮件列表归档浏览器一样的选项来隐藏电子邮件地址。虽然这只是一个有效的电子邮件地址约定,但诸如“git send-email”之类的工具编写时假定它为真(例如自动抄送补丁作者)。 - araqnid
4
您可以配置Git使用除user.name和user.email以外的身份来为GPG密钥签署标签。 - Jakub Narębski
1
旧的集中式版本控制系统使用“用户名”来标识提交(更改)的作者。姓名+电子邮件是良好的身份标识;但电子邮件不必是真实的。 - Jakub Narębski
4
GitHub 有一个更新,使得你可以使用一个与你的个人资料相连的假电子邮件地址。- https://dev59.com/SHrZa4cB1Zd3GeqPzCgl#20533922 - RyPeck
1
GitHub可以记住即使在已删除的分支上合并的PR提交,这些提交是通过rebase进行合并的(因此,在存储库中除了PR网页之外,不会公开电子邮件/名称)。如果PR已经合并,我不知道任何逆转提交的方法(如果它仍然打开,则可以进行rebase和强制推送)。 - D. A.

12

GitHub有一篇名为保护您的电子邮件地址隐私的帮助文章,其开头如下:

Git要求您在提交更改时进行身份验证,但您可以使用虚假地址隐藏您的联系信息。Git本身无法确定电子邮件是否有效。

值得知道:尽管Git并不关心这一点,但有些项目可能不接受您的贡献,如果您的提交没有有效的电子邮件地址,因此在按照这些说明之前,您需要研究项目的贡献政策。

GitHub很少收到针对Git提交电子邮件地址的垃圾邮件投诉,但如果您担心此问题,本指南应该能帮助您解决这些问题。

本指南包含如何配置Git和GitHub以使用虚假地址的步骤。


1
我在我的 GitHub 提交电子邮件地址上收到了很多垃圾邮件。我为此使用了专用的电子邮件地址。 - Mitar

9

数百万GitHub提交邮件“泄漏”

https://github.com/cirosantilli/all-github-commit-emails 提取自GitHub存档https://www.githubarchive.org 导出的提交。

GitHub存档从GitHub的事件API获取数据:https://developer.github.com/v3/activity/events/types/#pushevent 并每小时将其导出到Google BigQuery,这使查询变得更加容易。

PushEvent类型的事件中曾经显示电子邮件,但在我执行此操作后停止了。

我认为提交电子邮件不会在GitHub的Web界面上显示(除非您在GitHub配置文件中设置了电子邮件,2022年之后仅对已登录用户显示),因此任何收集都受API速率限制。待办事项:通过API从头开始收集1M电子邮件需要多长时间。

使用API获取某人的提交电子邮件的实用方法

ghmail() { curl "https://api.github.com/users/$1/events/public" | grep email; }
ghmail cirosantilli

或访问:https://api.github.com/users/cirosantilli/events/public

还有:

Git提交数据结构具有显式的作者和提交者电子邮件字段

显示在:Git提交对象数据结构的文件格式是什么?

因此,很明显这些信息会被默认添加到提交中。


8

是的,以上回答是正确的……除非你想让所有项目通常使用相同的电子邮件地址,那么你将使用以下命令:

git config --global user.email "me@email.com"

您还可以在用户部分中的主目录中编辑.gitconfig文件。

如果不使用全局选项,可以通过执行相同命令来为特定项目指定不同的电子邮件地址。

此外,我建议您在提交到公共区域时混淆您的电子邮件地址:

briancolfer(at)comcast.net

作为一个例子。

6

您可以追溯更改作者名称、电子邮件等信息。请注意,以下操作可能会损坏您的历史记录。

#!/bin/sh

git filter-branch --env-filter '

an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"

if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
then
    cn="Your New Committer Name"
    cm="Your New Committer Email"
fi
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
then
    an="Your New Author Name"
    am="Your New Author Email"
fi

export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'

本文摘自这里


5

GitHub有一个关于设置您的电子邮件地址的帮助部分。

具体来说,它说:

需要注意的是:您不必提供有效的电子邮件地址。如果您担心垃圾邮件,请改用虚假电子邮件地址。user@example.com是一种常见做法。


4

是的,您在 git config user.email 中指定的电子邮件地址将在像 GitWeb 这样的 Web 接口中可见。此外,每个人都可以通过克隆您的存储库来了解您的电子邮件地址,但这可能仍然远远超出了垃圾邮件机器人的能力范围。不过,没有人强迫您使用真实的电子邮件地址。如果未提供电子邮件地址,Git 将自动设置构造的电子邮件地址。在我的机器上,没有 user.email,它显示“Foo <foo@daughter.(none)>”的提交。


2
如果我将我的存储库公开,例如通过GitHub,我的电子邮件地址是否会对所有人可见?
注意:您还可以通过本地gitweb(Git存储库的Web前端,与常规Git发行版捆绑在一起,并且可以使用“git instaweb”安装)使存储库在本地可用。
而且,从Git 2.32(2021年第二季度)开始,“gitweb”学习了“电子邮件隐私”功能,以编辑各种页面上看起来像电子邮件地址的字符串。

查看 提交记录 0996dd3 (2021年3月28日),提交人为 Georgios Kontaxis (kontaxis)
(已合并至 提交记录 a9414b8,合并者为 Junio C Hamano -- gitster --,2021年4月13日)

gitweb: 添加“电子邮件隐私”功能以遮盖电子邮件地址

签名:Georgios Kontaxis
认可:Eric Wong
认可:Ævar Arnfjörð Bjarmason

Gitweb从Git日志中提取内容,并通过HTTP进行访问。因此,在提交中发现的电子邮件地址暴露给网络爬虫,它们可能不尊重robots.txt。这可能导致收到未经请求的消息。
引入一个“email-privacy”功能,从生成的HTML内容中删除电子邮件地址。具体来说,是从Git日志的作者/提交者和评论部分检索的模糊地址。该功能默认关闭。
此功能无法阻止某人下载未编辑的提交日志,例如通过克隆存储库并从中提取信息。它旨在阻碍网络爬虫低成本、大量收集电子邮件地址的行为。
gitweb.conf现在包括在其手册页面中:man page

email-privacy

从生成的HTML等内容中删除电子邮件地址。这样可以遮盖从Git日志的作者/提交者和注释部分检索到的电子邮件地址。
它旨在阻止收集和滥用地址的网络爬虫。这些爬虫可能不尊重robots.txt
请注意,用户和用户工具也会将地址作为省略处理。如果Gitweb不是工作流程的最后一步,则后续步骤可能会因接收到的省略信息而出现问题。
默认情况下禁用。


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