首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git如何解析user.email和password来认证用户?

git如何解析user.email和password来认证用户?
EN

Stack Overflow用户
提问于 2019-08-29 23:10:59
回答 2查看 227关注 0票数 2

我有全局git配置(~/.gitconfig),其中我的电子邮件是someUser@someemail.com

当我在本地存储库(我之前使用https进行了身份验证)中输入git config user.email时,我的用户名仍然是someUser@someemail.com

但是,对于这个本地存储库,我使用与我拥有的电子邮件不同的电子邮件进行身份验证,该电子邮件通过配置显示。

问题是,git如何知道使用哪个电子邮件/用户?我还检查了本地存储库.git/config ->中的文件,没有任何有关电子邮件的信息。

EN

回答 2

Stack Overflow用户

发布于 2019-08-29 23:15:23

git config --list --show-origin

此命令将显示所有配置选项以及设置该选项的每个文件的位置。

docs

读取时,默认情况下从系统、全局和存储库本地配置文件中读取值,选项--system、--global、--local、--worktree和--file可用于告知命令仅从该位置读取(请参见文件)。

..。

环境

GIT_CONFIG

从给定的文件中获取配置,而不是.git/config。使用"--global“选项强制将其设置为~/.gitconfig。使用"--system“选项强制将其设置为$(前缀)/etc/gitconfig.

票数 3
EN

Stack Overflow用户

发布于 2019-08-30 00:05:12

值得注意的是,这里没有身份验证。Git只是简单地相信你的任何声明。你可以自称是巴拉克·奥巴马、安吉拉·默克尔,或者任何你喜欢的人。Git会简单地相信你。

问题是,git如何知道使用哪个电子邮件/用户?

Git执行的等同于:

代码语言:javascript
复制
git config --get user.name

获取用户名,并执行以下操作:

代码语言:javascript
复制
git config --get user.email

获取要使用的电子邮件地址。另请参阅Doug Richardson's answer;考虑使用--list-origins查看此特定git config可能找到设置的所有位置。

在内部,为了确定git config --get user.name的输出,Git首先读取最宽的(--system)配置。如果这设置了一个名字,那就是目前的你的名字。接下来,Git读取--global配置文件。如果这设置了一个名称,它将覆盖任何以前的设置,现在这就是您的名称-至少现在是这样。然后,Git读取--local配置文件,通常是.git/config。如果这设置了一个名称,它将覆盖任何以前的设置。如果有每个工作树的配置(如果你的Git足够新,可以有每个工作树的配置),Git就会以同样的行为读取那个配置。git commit命令没有为其内部git config --get提供--file选项,因此这是最后一个可以覆盖您的名称的地方-但请参见下面的内容。

如果这些都没有设置名称,一些版本的Git会有一个最终的后备,在那里它们会查询一些系统设置。这取决于你的操作系统,以及为你构建Git二进制文件的人在构建你的Git二进制文件时所选择的一些设置。

这里的用户名和电子邮件地址被记录到提交对象中。一旦在某些特定的提交对象中进行了设置,该名称和电子邮件地址就不能更改。如果它们是错误的,您可以在更改设置后使用git commit --amend将其替换为新的和改进的提交。

git命令本身具有可选的-c参数:

代码语言:javascript
复制
git -c user.name=hello user.email=world@large commit ...

为了这个git commit命令的目的,将您的姓名和电子邮件设置为hello <world@large>。您还可以使用GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILGIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL环境变量覆盖用户名和/或电子邮件地址设置。就像在所有其他情况下一样,如果你设置了这些,Git就会相信你,无论你的声明可能有多离谱。

请注意,如果将ssh://https:// URL用于git pushgit fetch,则ssh或http连接本身不会使用这些名称。在这里,Git依赖于外部程序和助手。这些外部程序和帮助器是特定于操作系统的: Linux和Windows使用不同的方法来确定您是谁,当您从您的机器连接到另一台服务器时,服务器将(可能)执行某种身份验证,以验证您是否为您所声称的身份,以及您是否有权访问该服务器。

这种身份验证,如果它发生的话,大部分都不在Git的范围之内。有一些Git助手,其中一些是随Git一起提供的,它们在特定的OSes上很有用。例如,有关调整MacOS "osxkeychain“帮助器的信息,请参见disable git credential-osxkeychain

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57713114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档