Git "git config --global user.name"这个选项的作用是什么?

4

Git新手注意!我有一个基本问题,为什么Git允许将用户名更改为配置选项。

 git config --global user.name trojan

这个选项是否会为提交者打开冒充和在历史记录/日志中造成混乱的大门?为什么不能简单地从连接到GIT的凭据中获取用户名呢?


你假设代码总是被推送到远程仓库。考虑一种情况,即本地进行了提交但从未推送的情况。 - Greg
1个回答

4
  1. 正如Greg在评论中指出的那样,这只适用于纯推送工作流。还有其他许多工作流,包括纯拉取、电子邮件、git bundle或任何这些的混合使用。
  2. 由于技术原因,它不能完全起作用:提交的身份是该提交的完整内容(包括提交的作者提交者字段)的加密校验和。这些必须在创建提交时分配,并且一旦分配,就无法更改:要“更改”提交的任何部分,您需要将其复制到新的提交对象中,该对象获得新的提交哈希,仅当它与原始提交按位相同时才相同。换句话说,我可以通过按位复制您的提交来冒充您,包括所有源代码、日志消息、时间戳等等。但是为了做到这一点,我必须获取您的提交,此后我的副本就是您的提交。在这种情况下,它您的提交,应该有您的姓名!
  3. 通常有很好的理由将公开的身份(用户名和电子邮件)与任何身份验证凭据分开:例如,我用于在GitHub上进行身份验证的凭据与我用于在其他位置进行身份验证的凭据不同。然而,我仍然是同一个人。可以添加一个间接层——我使用凭据A进行身份验证,然后该站点将A映射到B以获取我的姓名(实际上GitHub正是这样通过ssh“登录”为git@github.com)——但这将所有权力置于网站手中。这与设计哲学相悖。
如果您希望验证某个特定提交的真实性 - 例如,您获得了一个ID为99154acf3ba ...的提交,并声称由Linus Torvalds或Bill Gates或Barack Obama等人撰写 - Git提供使用一些外部身份验证服务(例如PGP),该服务使用数字签名及其所有复杂性(包括信任链和撤销)。这个特定领域有一些正在进行的发展,其中一些影响Git。 (通过GPG的PGP身份验证确实内置到Git中,但是由外部程序完成。这里特别明显的弱点是,签名的标签或提交仅验证一个标签或提交本身。进一步的身份验证取决于Merkle树的安全性,该树对于Git使用的SHA-1尚未被完全破坏,但已经受到怀疑:请参见链接的StackOverflow问题。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接