密钥用户有多个值。


76

出于某种原因,当我尝试为我的git帐户设置user.name时,出现了“关键user.name有多个值”的错误。如何将其设置为单个名称?


我想我也有类似的问题。但是我在这里找不到答案。我不确定为什么,以及我的问题是否可以从这个问题中复制出来。我想知道回答这个问题的人是否愿意澄清这个问题。检查文件“本地”,“全局”和“设置”,我只能user.name在全局中看到一个。但git config --listgit config --get-all user.name给它两次给我。但git config --local --get-all user.name一无所获。 git config --global --get-all user.name给出一个。 git config --system --get-all user.name什么都不给。奇怪!?
DrBeco

得到它了!升级后,有些奇怪的事情使git将链接和文件都视为单独的东西。我有一个ln ~/.config/git/config ~/.gitconfig链接。现在,我删除了链接文件~/.gitconfig。我是在一段时间以前添加它的,当时git没有查看~/.config/目录,以便更井井有条。
DrBeco

1
@DrBeco,当您意外运行类似时,会发生此错误git config user.name foo bar
Pacerier,2015年

Answers:


54

更新(2012年12月)

git1.8.1rc1现在的操作方式有所不同:

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

严格来说,这可能是API回归,但实际上没有人会注意到它。


原始答案(2010年11月)

git config手册页提到:

变量名称不区分大小写,并且仅允许字母数字字符和-。
一个给定变量可以有多个值;我们说那个变量是多值的

实际上,这样的配置设置(具有多个可能的值)称为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 --listgit config --get-all user.name给它两次我

正如我在Git 2.8(2016年3月)中提到的那样,您可以使用(查看所有设置:

git config -l --show-origin

您可以看到重复设置的位置(本地,全局,系统)git config [--local/--global/--system] --replace-all key value,如mb21答案所示


5
如果您的本地存储库名称覆盖了用户的全局名称,git config --get-all user.name则将同时打印这两个名称,而不告诉您哪一个来自何处。这就是为什么我建议只查看文件的原因。似乎比尝试小心使用该命令要容易。
卡斯卡贝尔

@Jefromi:没错,但是您可以通过最后两个查询快速消除全局配置和系统配置。无论如何,我确实对您的回答表示赞同;)
VonC 2010年

4
问题是“如何将其设置为单个名称?” -我看不到上面的答案吗?
路加·普普利特

@LukePuplett可以通过以下方式将其设置为单个名称:a /在系统,全局和本地级别将不同的值更改为相同的值,或者b /删除多余的值并仅保留一个级别。每次git config key value都涉及一个简单操作,但是您首先需要确定每个级别上的值。那就是我的答案出现的地方。
VonC

@VonC Windows版本中发生了一些奇怪的事情。设置全局设置的比较工具只是更和增加吸收K补充说:v对中的.gitconfig文件- stackoverflow.com/questions/13921687/...
卢克Puplett

134

如果您只想重置所有它们:

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

9
真正回答问题的唯一答案。+1
丹尼尔(Daniel)2013年

6
如果有本地存储库设置,则不会重置这些设置。重复执行不带--global标志的命令以重置这些标志:git config --replace-all user.email "new@mail.com"
Unixmonkey 2014年

1
这应该是最佳答案
neilsimp1 2016年

1
这是回答问题的唯一答案-对。它实际上删除了重复的条目,谢谢@ mb21
samuel owino

1
对于'core.autocrlf'变量,这对我不起作用。它仅在下面设置一个。
ZenUML.com上的Peng '17

12

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

git config --global user.name "Desired name"如果希望将其设置为全局设置(可能是这种情况),或者也可以将其设置为正值,则可以直接将其设置--global为回购特定的设置-但最好是自己检查文件并找出罪魁祸首,确保您知道自己拥有什么。回购专用的将覆盖全局的。理想情况下,您应该全局设置名称,并且出于充分的理由仅在项目中覆盖它。


我在.gitconfig中观察到多个名称,并将它们更新为单个值。然后如您在/ etc / bashrc /中提到的那样进行全局分配。它从全局配置中获取了新值。谢谢。
kumar 2014年

7

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

转到您的应用程序目录

查看所有隐藏文件...在其中转到.git隐藏文件夹

打开文件配置文件

它会显示一些像

[user]
    name = =
    name = =
    email = =

将这些行替换为

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

6

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

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

输出示例:

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

5

首先看一下配置中的user.names:

git config --list

输出示例:

user.email=abarker@cern.ch
user.name=fiveisgreen
user.github=fiveisgreen
user.name=Anthony

在此示例中,user.name被列出两次。要删除重复项,请执行以下操作:

git config --global --unset user.name

3
git config --global --replace-all user.email "Prince.Agbebiyi@me.com"如果您有重复的配置,则可以使用
Babajide Prince

2

这个线程对我有很大帮助。这是我为解决全局配置设置中重复的键条目所做的工作。Windows7。我搜索了一个名为.gitconfig的文件,该文件位于系统上的/ users / owner中。我使用文本编辑器(Atom)对其进行了编辑,并删除了有问题的行。

我相信在使用git config命令时无意中将电子邮件地址括在引号中时,已设置了重复密钥,至少这是我的shell日志所指示的内容。哎呀!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.