为什么本地git仓库要求email?

  • 本文关键字:email git git
  • 更新时间 :
  • 英文 :


我理解为什么Git会想知道你的数据,如果你试图推/拉到远程分支。但是,如果我想拥有只存在于我的笔记本电脑上的本地回购,为什么它要我在提交之前提供凭据呢?

*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

因为作者和提交者的身份是每个GIT提交文件的强制组件。正如您在以下源代码中看到的:

  • Git对象

    提交对象的格式很简单:它指定了项目在该点快照的顶层树;如果有的话,父节点提交(上面描述的commit对象没有父节点);作者/提交者信息(使用您的user.name和user.name)。电子邮件配置设置和时间戳);空白行,然后是提交消息。

  • Git文件格式

    一个提交文件看起来像这样:

    commit <content length><NUL>tree <tree sha>
    parent <parent sha>
    [parent <parent sha> if several parents from merges]
    author <author name> <author e-mail> <timestamp> <timezone>
    committer <author name> <author e-mail> <timestamp> <timezone>
    <commit message>
    

如果你不告诉Git你是谁,它就不能创建格式良好的提交文件。所以…它坚持要你告诉它。

没有什么可以阻止你在本地存储库中使用虚假的身份信息,但是如果你以后需要发布你所做的提交,它很可能会回来咬你。

因为这是你的身份,或者它指定了在回购中工作的人的身份。想象两个人由于某种原因在同一个系统上工作。因此,每个人都可以以不同的身份在自己的repo中工作。

Git提交有与时间相关的元数据。提交的作者(他们的名字)和作者的电子邮件是元数据的一部分。如果这纯粹是你在本地做的一个项目,你可以把这些存根为空字符串或伪值,但这在协作环境中是非常重要的信息,比如blame(谁写了什么,什么时候写的)。

从:https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

[…作者/提交者信息(使用您的user.name和user.email配置设置[…]

认为这个邮件是你的凭证是很常见的错误,但它实际上只是git创建提交时使用的信息。

证据是,你可以把任何错误的或不回复的电子邮件,即使它可能是一个坏主意。

确保有人创建了一个特定的提交,真正安全的方法是对它签名。

您的凭据仅用于连接到远程服务器以获取/推送您的提交。

每个提交都存储(永久且不可更改,只要提交本身继续存在)一个姓名和电子邮件地址对,或者更准确地说,是两个这样的对,如"author"one_answers"committer",以及两个日期和时间戳。Git需要从某个地方获取这些。Git通常从user.nameuser.email设置中获取这两个字符串。

Git可以编译以使用操作系统级别的信息,如果不在Git配置文件中,则提供名称和电子邮件地址。当Git以这种方式编译时,如果没有设置user.name和/或user.email, Git将使用编译后的操作系统相关代码来完成此操作。然而,还有一个设置user.useConfigOnly禁用此模式。git config文档描述如下:

user.useConfigOnly
指示Git避免尝试猜测user.email和CC_9的默认值控件中检索值配置。例如,如果您有多个电子邮件地址然后,我想为每个存储库使用一个不同的在全局配置中将此配置选项设置为true除了名称之外,Git还会提示您设置一个电子邮件在新克隆的存储库中进行新的提交。默认为false

假设你的Git编译没有猜测代码,或者你把user.useConfigOnly设置为true(或者两者都有)。

(正如其他人注意到的,这两个设置不用于身份验证。我认为如果配置项的名称不同,例如commit.callmecommit.emailme或诸如此类的名称,这可能会更清楚。但user.*设置是几十年前选定的;我们现在被这些拼写卡住了

最新更新