关键的user.name Git有多个值

出于某种原因,当我尝试为我的git帐户设置user.name时,出现“关键的user.name超过一个值”的错误。 我怎样才能把它设置成一个单一的名字?

更新(2012年12月)

git1.8.1rc1现在运行不同:

“git config –get”用于诊断同一个configuration文件中同一个variables的多个定义是否存在错误,但是现在它应用了内部configuration逻辑使用的“最后一个获胜”规则

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


原文答案(2010年11月)

gitconfiguration手册页提到:

variables名不区分大小写,只允许使用字母数字字符和 – 。
给定variables可以有多个值; 我们说那个variables是多值的

实际上,这样的configuration设置(有多个可能的值)称为multivar

正如Jeuttbuild议的那样,看看3个configuration文件中有多个user.name行。
你可以像这样查询多个值:

 git config --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值的一个configuration文件需要修复。


来自评论:

检查文件“本地”,“全球”和“设置”我只能看到一个全局的用户名。
但是, git config --listgit config --get-all user.name给了我两次

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

 git config -l --show-origin 

你可以看到重复设置(local,global,system)的位置,你可以使用git config [--local/--global/--system] --replace-all key value ,就像mb21的答案一样 。

如果你只是想重置所有这些:

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

您应该检查~/.gitconfig (您的用户全局configuration)以及存储库中的.git/config (回购特定configuration)的内容。 其中一个user部分应该看到两个name行。 (在一个文件中它也可以是两个独立的用户部分。)只要删除一个你不想要的,你应该很好走。

你也可以直接使用git config --global user.name "Desired name"来设置它,如果你希望它是一个全局设置(可能是这样的话),或者减去--global的特定于repo的设置 – 但是最好是检查文件并自己找出罪魁祸首,确保你知道你有什么。 回购专用的将覆盖全球。 理想情况下,你应该在全球范围内设置你的名字,只有在项目中有一个很好的理由才能覆盖它。

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

转到您的应用程序目录

查看所有隐藏的文件…在那个去.git隐藏的文件夹

打开文件configuration文件

它会显示一些行

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

replace那些行

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

首先查看configuration中的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 

这个线程帮了我很多。 这是我做了什么来解决在我的全局configuration设置重复键入口。 Windows 7.我search了一个名为.gitconfig的文件,它位于我系统上的/ users / owner。 我用文本编辑器(Atom)编辑它,并删除了违规行。

我相信当我不小心把我的电子邮件地址用引号引起来的时候,使用git config命令来设置重复键,至less这就是我的shell日志所指示的。 哎呀!

要debugging这样的事情,你可以使用这个命令:

 git config --list --show-origin 

它显示每个configuration条目的原始文件。
带有重复的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