Git“git config --global user.name”为什么存在这个选项?

时间:2017-03-21 02:15:15

标签: git github bitbucket gitlab

Git初学者警报! 我有一个基本问题,为什么GIT允许用户更改用户名作为配置选项

 git config --global user.name trojan

这个选项是否在提交者的大门上冒充并在历史/日志中造成混淆?为什么不是从用于连接GIT的凭据中获取用户名这么简单?

1 个答案:

答案 0 :(得分:3)

  1. 作为Greg notes in a comment,只能在纯推工作流程中使用。还有很多其他内容,包括纯拉,电子邮件,git bundle或其中任何一种。
  2. 由于技术原因, 完全工作:提交的标识是该提交的完整内容的加密校验和,包括提交{{1} }和author字段。这些必须在创建提交时分配,一旦分配,就永远不能更改:到"更改"提交的任何部分,您将其复制到新的提交对象,该对象获取新的提交哈希,如果它的 bit-for-bit 相同,则只与原始提交相同。换句话说,我可以通过逐位复制提交来模拟您,包括所有源,日志消息,时间戳等。但要做到这一点,我必须获取你的提交,之后我的副本只是你的提交。在这种情况下,它你的提交,而应该在你的名字上有你的名字!
  3. 通常有充分理由将公开的身份(用户名和电子邮件)与任何身份验证凭据分开:例如,我用于向GitHub进行身份验证的凭据与我用于向其他位置进行身份验证的凭据不同。但我仍然是同一个人。可以添加一个间接级别 - 我使用凭据 A 进行身份验证,然后站点将 A 映射到 B 以获取我的名字(并且事实上,GitHub只使用ssh,因为一个"登录"为committer) - 但这会将所有权力交给网站。这与设计理念相悖。
  4. 如果您希望建立某个特定提交的真实性,例如,您获得ID为git@github.com或某些此类提交的提交,并声称由Linus Torvalds创作或比尔盖茨或巴拉克奥巴马或其他什么-Git提供了使用一些外部认证服务的能力,例如PGP,它使用数字签名及其所有复杂性(包括Chain of Trust和撤销)。我们应该说,这一特定领域正在取得一些进展,some of which affect Git somewhat

    (通过GPG 的PGP身份验证内置于Git中,但由外部程序完成。这里特别明显的缺点是签名标记或提交仅验证一个标记或提交自身。进一步的身份验证取决于关于Merkle tree的安全性,这对于Git使用SHA-1而言并非完全受到了损害,但却越来越可疑:请参阅链接的StackOverflow问题。)