为什么仅本地使用的Git仓库提交时要求配置邮箱和用户名?
为什么纯本地存储的Git仓库执行提交前仍要求配置身份信息
Git的提交身份配置要求,和仓库是否对接远程分支、是否执行push/pull操作没有绑定关系——作者信息是Git提交对象的强制内置组成部分,从Git的底层设计来看,只要你要生成合法的提交记录,就必须提供对应的身份字段,和你把仓库存在哪、会不会同步到远程完全无关。
每一条Git提交在生成时,下列信息都会被纳入提交哈希的计算逻辑,缺任意一项都无法生成有效的commit对象:
- 提交作者姓名
- 提交作者邮箱
- 提交时间戳
- 提交说明内容
- 提交对应的代码快照树哈希、父提交哈希
很多人会误以为身份配置是为了远程交互鉴权,本质是混淆了两套完全独立的身份机制:
- 本地要求配置的
user.name和user.email是提交的署名信息,会永久写入每一条你生成的提交记录里,Git本身不会对这两个字段做真实性校验,纯本地使用时你完全可以填任意自定义内容,只要有值就能满足提交要求,这些信息你不主动推送到远程的话,不会流出你的个人电脑。 - push/pull操作时用到的SSH密钥、HTTPS账号密码,才是远程服务器用来校验你有没有仓库读写权限的鉴权信息,和本地的提交署名配置没有关联。
你执行提交时看到的提示就是Git在检测到缺少必填的署名字段时抛出的引导:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"git config --global user.name "Your Name"
如果是纯个人本地使用,你不需要填写真实的姓名和邮箱,执行类似下面的配置命令就能正常提交,配置一次全局生效,后续所有本地仓库都不用重复设置:
git config --global user.name "local-user" git config --global user.email "local@my-laptop"
内容的提问来源于stack exchange,提问作者Alyona
相关产品推荐
相关产品推荐

