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


95

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

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


19
我认为这是一个与编程相关的工具的有效(尽管不是技术性的)问题,就像SO上的许多其他问题一样,不应该被视为“与编程无关”。
约尼克,

3
GitHub现在(2013年8月)允许您将电子邮件地址设为不公开!请参阅下面的答案。您也可以注册一个伪造的电子邮件地址,以便在您推送到GitHub的提交中不使用它。
VonC

Answers:


36

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

Author: Joe White <joewhite@mysite.com>

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

不过,除非您使用Gitweb或GitHub之类的服务来通过Web界面提供您的回购信息,否则垃圾邮件发送者可能不会看到您的电子邮件(仅将其放在Internet上是不会这样做的)。

我想您可以填写一个虚假的电子邮件地址或使用一个空字符串或空格之类的东西(我不认为Git会检查电子邮件的格式或有效性),但是如果克隆回购协议的人需要发送电子邮件,则该电子邮件很有用给您打补丁或以某种方式与您联系。


3
可以说是github,gitweb等人应该有一个选项来隐藏电子邮件地址,就像邮件列表存档查看器一样。虽然这是一个有效的电子邮件地址只是一个约定,像“混帐发送电子邮件”工具都写假设这是真的(自动补丁副本中加入作家,例如)
araqnid

2
您可以将git配置为使用user.name和user.email给GPG密钥签名的其他身份签名标签
JakubNarębski09年

较旧的集中式版本控制系统使用“用户名”来标识提交(更改)的作者。名称+电子邮件是良好的身份;它不一定是真实的电子邮件。
2009年

3
GitHub上有一个更新,你可以使用连接到您的个人资料伪造的电子邮件地址- stackoverflow.com/a/20533922/2158473
RyPeck

GitHub甚至可以记住在合并的基础上合并的已删除分支上的PR提交(因此,除了PR网页之外,不要在仓库中的任何地方公开电子邮件/名称)。如果PR被合并,我不知道有什么办法可以撤消提交(如果它仍处于打开状态,则可以重新设置基础并强制执行推送)。
DA,

43

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都使用您的主要电子邮件地址。这包括创建,编辑和删除文件,以及合并拉取请求。

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

电子邮件设定

启用此功能后,基于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重写历史资料库和强制推新的历史了。


1
知道这很有用,但是我认为GitHub与a并不相同gitgit是一个通用的开放源代码版本控制工具,而GitHub是一个允许您发布git存储库的网站。GitHub没有创建git,他们恰好创建了一个很好的网站,可以很好地工作。
orev

@ore​​v好点。我已经在警告中包含了该警告。
VonC

10

GitHub上有一个帮助文章,名为保持您的电子邮件地址私密,开始于:

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

提示:尽管Git不在乎,但是如果您的提交没有有效的电子邮件地址,某些项目可能不接受您的捐款,因此您将需要在遵循这些说明之前研究项目的捐款政策。

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

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


我的GitHub提交电子邮件地址中收到了大量垃圾邮件。我为此使用专用的。
Mitar 2014年

6

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

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

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

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

另外,如果提交的邮件要进入公共区域,我建议您对电子邮件进行混淆处理:

briancolfer(at)comcast.net

举个例子。


5

数百万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,这使查询变得更容易。

电子邮件显示在类型的事件上PushEvent

我认为提交电子邮件不会在GitHub的Web界面上的任何位置显示,因此任何收集都受到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对象数据结构的文件格式是什么?

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


4

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


4

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

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

这里取


4

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

具体说:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.