密钥user.name Git有多个值

密钥user.name Git有多个值,git,github,Git,Github,由于某些原因,当我尝试为我的git帐户设置user.name时,我得到了一个错误“key user.name有多个值”。如何将其设置为单个名称?您应该检查相关存储库中的~/.gitconfig(您的用户全局配置)以及.git/config的内容(特定于repo的配置)。您应该在其中一行的user部分下看到两行name。(它也可以是一个文件中两个独立的用户部分。)只要删除你不想要的部分,你就可以开始了 如果您希望它是一个全局设置(可能是这种情况),您也可以直接使用git config--globa

由于某些原因,当我尝试为我的git帐户设置user.name时,我得到了一个错误“key user.name有多个值”。如何将其设置为单个名称?

您应该检查相关存储库中的
~/.gitconfig
(您的用户全局配置)以及
.git/config
的内容(特定于repo的配置)。您应该在其中一行的
user
部分下看到两行
name
。(它也可以是一个文件中两个独立的用户部分。)只要删除你不想要的部分,你就可以开始了

如果您希望它是一个全局设置(可能是这种情况),您也可以直接使用git config--global user.name“Desired name”设置它,或者使用相同的方法减去回购协议特定设置的
--global
,但最好检查文件并自己找到罪魁祸首,以确保您知道自己拥有什么。特定回购协议将覆盖全局回购协议。理想情况下,您应该在全局范围内设置您的名称,并且只有在有充分理由的项目中才覆盖它。

更新(2012年12月)

现在的运作方式有所不同:

“git config--get”用于诊断同一配置文件中同一变量的多个定义是否存在错误,但现在它应用内部配置逻辑使用的“最后一个赢”规则

严格地说,这可能是API回归,但预计在实践中没有人会注意到它


原始答复(2010年11月)

git配置手册页提到:

变量名不区分大小写,只允许字母数字字符和-。
给定变量可以有多个值;然后我们说这个变量是多值的

实际上,这种配置设置(具有多个可能的值)称为multivar

正如Jefromi所建议的,在3个配置文件中的哪一个文件中有多个
user.name
行。
您可以查询多个值,如下所示:

git config --local  --get-all user.name #local repo git config file)
git config --global --get-all user.name #user config file)
git config --system --get-all user.name #system git config file)
需要修复回答多个
user.name
值的一个配置文件


从评论中:

检查文件“本地”、“全局”和“设置”,我只能在全局中看到一个
user.name

但是
git config--list
git config--get all user.name
给了我两次

正如我在中提到的,您可以使用(查看所有设置:

git config -l --show-origin

当您看到重复设置的位置(本地、全局、系统)时,您可以使用git config[--local/--global/--system]--替换所有键值,如在中所示。

如果您只想重置所有键值:

git config --global --replace-all user.email "new@mail.com"

首先查看配置中的user.name:

git config --list
示例输出:

user.email=abarker@cern.ch
user.name=fiveisgreen
user.github=fiveisgreen
user.name=Anthony
file:C:/Users/john.doe/.gitconfig   user.name=John Doe
file:C:/Users/john.doe/.gitconfig   user.email=john.doe@somemail.com
file:C:/Users/john.doe/.gitconfig   core.preloadindex=true
file:C:/Users/john.doe/.gitconfig   core.fscache=true
file:C:/Users/john.doe/.gitconfig   core.autocrlf=input
file:C:/Users/john.doe/.gitconfig   gc.auto=256
在本例中,user.name列出两次。要删除重复项,请执行以下操作:

git config --global --unset user.name

您可以手动更改/编辑github的用户名和电子邮件

转到应用程序目录

查看所有隐藏文件…进入
.git
隐藏文件夹

打开文件配置文件

它将显示一些行,如

[user]
    name = =
    name = =
    email = =
将这些线路替换为

[user]
    name = username
    email = user@test.com

这个线程帮了我很大的忙。下面是我在全局配置设置.Windows 7中解析一个重复的密钥项所做的工作。我搜索了一个名为.gitconfig的文件,该文件位于我的系统上的/users/owner中。我用文本编辑器(Atom)编辑了它,并删除了有问题的行


我相信重复键是在我使用git config命令时无意中将电子邮件地址括在引号中设置的,至少我的shell日志表明了这一点。Ooops!

要调试这些东西,您可以使用以下命令:

git config --list --show-origin
它显示每个配置条目的源文件。
带有重复的
core.autocrlf
和不需要的
C:\\ProgramData/Git/config
文件的输出示例:

$ git config --list --show-origin
file:"C:\\ProgramData/Git/config"       core.symlinks=false
file:"C:\\ProgramData/Git/config"       core.autocrlf=true
file:"C:\\ProgramData/Git/config"       core.fscache=true
file:"C:\\ProgramData/Git/config"       color.diff=auto
file:"C:\\ProgramData/Git/config"       color.status=auto
file:"C:\\ProgramData/Git/config"       color.branch=auto
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    diff.astextplain.textconv=astextplain
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    filter.lfs.clean=git-lfs clean -- %f
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    filter.lfs.smudge=git-lfs smudge -- %f
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    filter.lfs.required=true
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    filter.lfs.process=git-lfs filter-process
file:"C:\\Program Files\\Git\\mingw64/etc/gitconfig"    credential.helper=manager
file:C:/Users/john.doe/.gitconfig   user.name=John Doe
file:C:/Users/john.doe/.gitconfig   user.email=john.doe@somemail.com
file:C:/Users/john.doe/.gitconfig   core.preloadindex=true
file:C:/Users/john.doe/.gitconfig   core.fscache=true
file:C:/Users/john.doe/.gitconfig   core.autocrlf=input
file:C:/Users/john.doe/.gitconfig   gc.auto=256
file:.git/config        core.filemode=false
file:.git/config        core.bare=false
file:.git/config        core.logallrefupdates=true
file:.git/config        core.symlinks=false
file:.git/config        core.ignorecase=true
file:.git/config        core.autocrlf=input
您可以对
--system
--global
执行相同的操作,以检查gitconfig文件的位置:

git config --global --list --show-origin
示例输出:

user.email=abarker@cern.ch
user.name=fiveisgreen
user.github=fiveisgreen
user.name=Anthony
file:C:/Users/john.doe/.gitconfig   user.name=John Doe
file:C:/Users/john.doe/.gitconfig   user.email=john.doe@somemail.com
file:C:/Users/john.doe/.gitconfig   core.preloadindex=true
file:C:/Users/john.doe/.gitconfig   core.fscache=true
file:C:/Users/john.doe/.gitconfig   core.autocrlf=input
file:C:/Users/john.doe/.gitconfig   gc.auto=256

如果您的本地回购名称覆盖了用户的全局名称,
git config--get all user.name
将同时打印这两个名称,而不会告诉您哪一个来自何处。这就是为什么我建议只查看文件;似乎比尝试小心使用命令查询更容易。@Jefromi:您是对的,但您可以很快消除这些名称全局和系统配置,以及最后两个查询。无论如何,我先投票给了你的答案;)问题是“如何将其设置为单个名称?”-我看不到上面的答案?@lukeppulett你可以通过以下方式将其设置为单个名称:a/在系统、全局和本地级别将不同的值更改为相同的值,或者b/删除额外的值,只保持一个水平。每次都会涉及一个简单的
git config键值
,但您需要首先确定每个级别上的值。“这就是我的答案所在。”里奇维尔说得好。git config--show origin--show scope--get all user.name可以提供帮助。这是唯一真正回答这个问题的答案+1如果存在本地存储库设置,则不会重置这些设置。在不带
--global
标志的情况下重复该命令,以重置以下内容:
git config--replace all user.email“new@mail.com“
这应该是最重要的答案这是唯一能回答问题的答案-你是对的。它实际上删除了重复的条目,感谢@mb21这对我来说不适用于'core.autocrlf'变量。我在.gitconfig中观察到多个名称,并将它们更新为单个值。然后,如您在/etc/bashrc/中所述,全局分配,它从全局配置中获取新值。谢谢。我想我也有类似的问题。但我在这里找不到答案。我不知道为什么,也不知道我的问题是否会与这个问题重复。我不知道回答这个问题的人是否愿意澄清这个问题。检查胶片