118

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

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

4

9 回答 9

55

2017 年 4 月更新

请参阅“私人电子邮件,现在更加私密

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

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

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

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

注意:正如orev下面评论的那样,Git没有公开任何内容。GitHub是一个 Git 存储库托管服务,可能会。 您推送本地 Git 存储库的地方可以公开元数据。


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

不过,这适用于基于 Web 的 GitHub 操作:提交仍然包含一个电子邮件地址,该地址可能与您用于 GitHub 帐户的电子邮件地址相同,也可能不同。
请参阅下文以“屏蔽”该(git commit)电子邮件。

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

但现在您可以将您的电子邮件地址保密。为此,请访问您的电子邮件设置页面:

电子邮件设置

启用此功能后,基于 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重写存储库历史记录并强制向上推送新的历史记录。

于 2013-08-12T11:41:58.823 回答
45

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

Author: Joe White <joewhite@mysite.com>

因此,任何拥有回购副本的人都可以使用该信息,因为它充当标识符。

但是,垃圾邮件机器人可能看不到您的电子邮件,除非您使用 Gitweb 或 GitHub 之类的服务通过Web 界面提供您的存储库(仅将其放在 Internet 上并不能做到这一点)。

我想你可以填写一个假的电子邮件地址或使用一个空字符串或空格或其他东西(我认为 Git 不会检查电子邮件的格式或有效性),但如果克隆 repo 的人需要发送电子邮件,那么电子邮件很有用你一个补丁或以某种方式联系你。

于 2009-05-22T12:29:25.703 回答
11

GitHub 有一篇名为Keeping your email address private的帮助文章,开头是:

Git 要求您标识自己的身份才能进行提交,但您可以使用虚假地址隐藏您的联系信息。Git 本身并不关心电子邮件是否有效。

很高兴知道:虽然 Git 不在乎,但如果您的提交没有有效的电子邮件地址,某些项目可能不会接受您的贡献,因此您需要在遵循这些说明之前研究您的项目的贡献政策。

GitHub 没有收到很多垃圾邮件被发送到 Git 提交电子邮件地址的报告,但如果您对此感到担心,本指南应该可以帮助您解决这些问题。

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

于 2012-09-05T17:54:29.477 回答
8

是的,上面的答案是正确的......除非您通常希望所有项目都使用相同的电子邮件地址,然后您将使用以下命令:

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

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

您可以通过执行不带全局选项的相同命令来为特定项目指定不同的电子邮件。

另外,我建议如果提交到公共区域,您可以混淆您的电子邮件:

briancolfer(at)comcast.net

举个例子。

于 2009-05-22T20:52:31.077 回答
8

数百万 GitHub 提交电子邮件“泄露”

https://github.com/cirosantilli/all-github-commit-emails从 GitHub 档案中提取https://www.githubarchive.org导出提交。

GitHub Archive 从 GitHub 的事件 API 获取数据:https ://developer.github.com/v3/activity/events/types/#pushevent并每小时将其导出到 Google BigQuery,这样更易​​于查询。

电子邮件曾经显示在 type 的事件上PushEvent,但在我这样做之后它们就停止了。

我认为提交电子邮件不会显示在 GitHub 的 Web 界面上的任何地方(除了您在 GitHub 个人资料中设置的电子邮件,并且仅显示 2022 年的登录用户),因此任何收集都受到 API 速率限制的限制。TODO:从头开始通过 API 收集 100 万封电子邮件需要多少时间。

使用 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 commit 对象数据结构的文件格式是什么?

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

于 2015-09-08T11:21:54.693 回答
5

您可以追溯更改作者姓名、电子邮件等。请注意,执行以下操作可能会破坏您的历史记录。

#!/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"
'

取自这里

于 2012-05-12T16:05:23.710 回答
5

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

具体来说,它说:

很高兴知道:您不必提供有效的电子邮件。如果您担心垃圾邮件,请改用虚假电子邮件。user@example.com 是一种常见的做法。

于 2013-01-16T14:48:22.813 回答
4

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

于 2009-05-22T12:30:49.460 回答
1

如果我通过 GitHub 公开我的存储库,我的电子邮件地址是否对所有人可见

注意:您还可以通过本地gitweb(Git 存储库的 Web 前端,与常规 Git 发行版一起打包,并且可以使用安装)使您的存储库在本地可用。git instaweb

在 Git 2.32(2021 年第 2 季度)中,gitweb“学习了”电子邮件隐私“功能来编辑在各个页面上看起来像电子邮件地址的字符串。

请参阅Georgios Kontaxis ( ) 的提交 0996dd3(2021 年 3 月 28 日(由Junio C Hamano 合并 -- --提交 a9414b8中,2021 年 4 月 13 日)kontaxis
gitster

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

签字人:Georgios Kontaxis
签字人:Eric Wong
签字人:Ævar Arnfjörð Bjarmason

Gitweb 从 Git 日志中提取内容并使其可以通过 HTTP 访问。
因此,在提交中找到的电子邮件地址会暴露给网络爬虫,并且它们可能不尊重robots.txt.
这可能会导致不请自来的消息。

引入“电子邮件隐私”功能,从生成的 HTML 内容中编辑电子邮件地址。
具体来说,从 Git 日志的作者/提交者和评论部分检索到的模糊地址。
该功能默认关闭。

此功能不会阻止某人下载未经编辑的提交日志,例如,通过克隆存储库并从中提取信息。
它旨在阻止网络爬虫轻松、大量收集电子邮件地址。

gitweb.conf现在在其手册页中包含:

email-privacy

从生成的 HTML 等内容中编辑电子邮件地址。这会掩盖从 Git 日志的作者/提交者和评论部分检索到的电子邮件地址。
它旨在阻止收集和滥用地址的网络爬虫。这样的爬虫可能不尊重robots.txt
请注意,用户和用户工具也会将地址视为已编辑。如果 Gitweb 不是工作流中的最后一步,那么后续步骤可能会因为他们收到的编辑信息而行为不端。
默认禁用。

于 2021-04-16T22:54:14.623 回答