为什么Git允许在user.name和user.email中使用错误的值?
我最近开始从事一个使用GitHub进行源代码控制的项目。我已经习惯了SVN,并且对它很满意,我对Git还不熟悉,关于它的一些事情让我非常恼火。其中之一是我需要显式地配置为什么Git允许在user.name和user.email中使用错误的值?,git,github,Git,Github,我最近开始从事一个使用GitHub进行源代码控制的项目。我已经习惯了SVN,并且对它很满意,我对Git还不熟悉,关于它的一些事情让我非常恼火。其中之一是我需要显式地配置user.name和user.email参数(或者不管正确的术语是什么,文档中似乎没有提到它,就像许多其他东西一样)。也许这是有道理的,因为我在本地提交时不需要提供凭据。但当我推送我的更改时,它实际上会要求我提供凭据,并且只接受设置的user.name值,而不检查它是否与我的登录名匹配。然后GitHub以其他人的名义显示我的更改,
user.name
和user.email
参数(或者不管正确的术语是什么,文档中似乎没有提到它,就像许多其他东西一样)。也许这是有道理的,因为我在本地提交时不需要提供凭据。但当我推送我的更改时,它实际上会要求我提供凭据,并且只接受设置的user.name
值,而不检查它是否与我的登录名匹配。然后GitHub以其他人的名义显示我的更改,这非常混乱
这背后是否有深刻的智慧,还是仅仅是草率的代码 TL;博士
考虑一下,如果您在GitHub上的用户名是foo
,而您的工作电子邮件地址是bar@example.com
。如果Git或GitHub强制在身份和电子邮件地址之间进行直接映射,您希望Git如何以可移植和可靠的方式处理这个问题
如果您的名字是John Q.Public
,您在本地主机上的用户名是John Public
,您的GitHub帐户是jpublic
,那又如何?Git应该如何处理跨系统的这些差异
Git不能,所以Git不能。相反,Git将提交数据和身份验证视为单独的事情
不要将提交数据与凭据混淆
存储在Git commit对象中的数据和呈现给GitHub的数据根本不是一回事。您认为您的用户名或电子邮件地址是您在Git中的身份,但实际上它们与Git或GitHub中的身份验证或授权无关您向GitHub提供的凭据是您的GitHub用户名和密码,或者您的GitHub用户名和SSH密钥,与您的本地用户名或电子邮件地址的任何关系都是完全巧合的。
如果您曾经在安装了NFS的共享上使用Git,在项目生命周期中为不同的公司工作,一次为多个公司工作,或者需要将工作项目和非工作项目在逻辑上分开,那么您将了解Git的电子邮件归属机制既灵活又可移植
请记住,Git是一个内容跟踪器,而不是一个身份验证系统。与第三方(如GitHub)进行的大多数身份验证实际上都是在Git之外使用SSH或HTTPS协议进行的,这两种协议都不关心提交对象中的字段
用户名和电子邮件地址不是身份
其中之一是我需要显式地配置user.name和user.email参数(或者不管正确的术语是什么,文档中似乎没有提到它,就像其他很多东西一样)。也许这是有道理的,因为我在本地提交时不需要提供凭据。但当我推送我的更改时,它实际上会询问我的凭据,只接受设置的user.name值,而不检查它是否与我的登录名匹配。然后GitHub以其他人的名义显示我的更改,这非常混乱
你把许多不同的问题混为一谈。下面列出了一些比较明显的问题,但肯定还有其他问题
git-tag--sign
和大量PGP文档)
当然,你也可以控制转移点。具体地说,在不同的时候,有人会给你一些提交和/或标记集,以及与之相关的东西(树和blob),并要求你将它们放在你的存储库中。如果您正在从他们那里检索数据,则此操作为git fetch
;如果他们正在向您发送数据,则此操作为git push
。那时,你可以决定是接受还是拒绝它们。Git通过“钩子”直接控制这个二进制操作
你们都可以拒绝(告诉ot)