Mehr als ein Wert für den Schlüssel user.name Git

75

Aus irgendeinem Grund wird die Fehlermeldung "Mehr als ein Wert für den Schlüssel user.name" angezeigt, wenn ich versuche, den user.name für mein Git-Konto festzulegen. Wie kann ich einen einzelnen Namen festlegen?

tshauck
quelle
Ich glaube, ich habe ein ähnliches Problem. Aber ich kann hier keine Antwort finden. Ich bin mir nicht sicher warum und ob meine Frage von dieser dupliziert würde. Ich frage mich, ob Leute, die diese Frage beantwortet haben, bereit wären, das Problem zu klären. Wenn ich die Dateien "lokal", "global" und "Einstellungen" untersuche, kann ich nur eine user.namein global sehen. Aber git config --listund git config --get-all user.namegibt es mir zweimal. Aber git config --local --get-all user.namegibt keine. git config --global --get-all user.namegibt einen einzigen. git config --system --get-all user.namegibt keine. Seltsam!?
DrBeco
Ich habs! Nach dem Upgrade hat etwas Seltsames dazu geführt, dass Git sowohl den Link als auch die Datei als separate Sache betrachtet. Ich hatte einen ln ~/.config/git/config ~/.gitconfigLink. Jetzt habe ich die Linkdatei gelöscht ~/.gitconfig. Ich habe es vor einiger Zeit hinzugefügt, als git das ~/.config/Verzeichnis nicht angesehen hat, um besser organisiert zu sein.
DrBeco
1
@ DrBeco, Dieser Fehler tritt auf, wenn Sie versehentlich so etwas ausführen git config user.name foo bar.
Pacerier

Antworten:

52

Update (Dezember 2012)

git1.8.1rc1 funktioniert jetzt anders:

"git config --get" wird verwendet, um das Vorhandensein mehrerer Definitionen derselben Variablen in derselben Konfigurationsdatei als Fehler zu diagnostizieren. Jetzt wird jedoch die von der internen Konfigurationslogik verwendete Regel "Last One Wins" angewendet .

Genau genommen kann dies eine API-Regression sein, aber es wird erwartet, dass dies in der Praxis niemand bemerken wird.


Ursprüngliche Antwort (November 2010)

Die git config Manpage erwähnt:

Die Variablennamen unterscheiden nicht zwischen Groß- und Kleinschreibung und es sind nur alphanumerische Zeichen und - zulässig.
Es kann mehr als einen Wert für eine bestimmte Variable geben. Wir sagen dann, dass die Variable mehrwertig ist .

Tatsächlich werden solche Konfigurationseinstellungen (mit mehreren möglichen Werten) als Multivar bezeichnet

Wie Jefromi vorschlägt, sehen Sie in welcher der 3 Konfigurationsdateien mehr als eine user.nameZeile.
Sie können mehrere Werte wie folgt abfragen:

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)

Die eine Konfigurationsdatei, die mehr als einen user.nameWert beantwortet , muss repariert werden.


Aus den Kommentaren:

Wenn ich die Dateien "lokal", "global" und "Einstellungen" untersuche, kann ich nur eine user.namein global sehen.
Aber git config --listund git config --get-all user.namegibt es mir zweimal

Wie ich hier mit Git 2.8 (März 2016) erwähne , können Sie Folgendes verwenden (um alle Einstellungen anzuzeigen:

git config -l --show-origin

Wenn Sie sehen, wo sich die doppelte Einstellung befindet (lokal, global, System), können Sie sie git config [--local/--global/--system] --replace-all key valuewie in der Antwort von mb21 verwenden .

VonC
quelle
5
Wenn Sie einen lokalen Repo-Namen haben, der einen globalen Benutzernamen überschreibt, git config --get-all user.namewerden beide gedruckt und nicht angegeben, welcher von wo stammt. Deshalb habe ich vorgeschlagen, nur die Dateien anzusehen. scheint einfacher zu sein, als vorsichtig mit dem Befehl abzufragen.
Cascabel
@Jefromi: Sie haben Recht, aber Sie können die globale und Systemkonfiguration mit den beiden letzten Abfragen schnell entfernen. Wie auch immer, ich habe Ihre Antwort zuerst
positiv
4
Die Frage lautet: "Wie kann ich einen einzelnen Namen festlegen?" - Ich kann die Antwort oben nicht sehen?
Luke Puplett
@LukePuplett Sie können einen einzelnen Namen festlegen, indem Sie: a / die verschiedenen Werte auf System-, globaler und lokaler Ebene in denselben ändern oder b / zusätzliche Werte entfernen und nur eine Ebene beibehalten. Jedes Mal ist eine einfache git config key valuebeteiligt, aber Sie müssen zuerst den Wert auf jeder Ebene bestimmen. Hier kommt meine Antwort ins Spiel.
VonC
@VonC In der Windows-Version ist etwas Seltsames los. Durch das Festlegen globaler Einstellungen für das Diff-Tool werden immer mehr k: v-Paare in der .gitconfig-Datei hinzugefügt
Luke Puplett
128

Wenn Sie nur alle zurücksetzen möchten:

git config --global --replace-all user.email "[email protected]"
mb21
quelle
7
Die einzige Antwort, die die Frage tatsächlich beantwortet. +1
Daniel Mai
5
Wenn lokale Repository-Einstellungen vorhanden sind, werden diese nicht zurückgesetzt. Wiederholen Sie den Befehl ohne das --globalFlag, um diese zurückzusetzen:git config --replace-all user.email "[email protected]"
Unixmonkey
1
Dies sollte die beste Antwort sein
neilsimp1
1
Dies ist die einzige Antwort, die die Frage beantwortet - Sie haben Recht. Es hat tatsächlich die doppelten Einträge entfernt, danke @ mb21
samuel owino
1
Dies funktioniert bei mir für die Variable 'core.autocrlf' nicht. Es wurde nur das unten stehende eingestellt.
Xiao Peng - ZenUML.com
12

Sie sollten den Inhalt ~/.gitconfig(Ihrer benutzer-globalen Konfiguration) sowie .git/configdas betreffende Repository (die repo-spezifische Konfiguration) untersuchen. Sie sollten zwei nameZeilen unter einem userAbschnitt in einer davon sehen. (Es können auch zwei separate Benutzerabschnitte in einer Datei sein.) Löschen Sie einfach den Abschnitt, den Sie nicht möchten, und Sie sollten bereit sein, loszulegen.

Sie können es auch direkt festlegen, git config --global user.name "Desired name"wenn Sie möchten, dass es sich um eine globale Einstellung handelt (wahrscheinlich der Fall), oder dasselbe abzüglich der --globalfür eine repospezifische Einstellung - aber es ist wahrscheinlich am besten, die Dateien zu überprüfen und den Schuldigen selbst zu finden, um sie vorzunehmen sicher weißt du was du hast. Das repospezifische überschreibt das globale. Idealerweise sollten Sie Ihren Namen global festlegen und ihn nur aus gutem Grund in einem Projekt überschreiben.

Cascabel
quelle
Ich habe mehrere Namen in .gitconfig beobachtet und sie auf einen einzigen Wert aktualisiert. Und dann global zugewiesen, wie Sie in / etc / bashrc / erwähnt haben. Der neue Wert wurde aus der globalen Konfiguration übernommen. Danke.
Kumar
7

Sie können den Benutzernamen und die E-Mail-Adresse für github manuell ändern / bearbeiten

Wechseln Sie in Ihr Anwendungsverzeichnis

Alle versteckten Dateien anzeigen ... Gehen Sie in den .gitversteckten Ordner

Datei-Konfigurationsdatei öffnen

Es werden einige Zeilen wie angezeigt

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

Ersetzen Sie diese Zeile durch

[user]
    name = username
    email = [email protected]
Sumit Munot
quelle
5

Schauen Sie sich zuerst an, welche user.names in der Konfiguration enthalten sind:

git config --list

Beispielausgabe:

[email protected]
user.name=fiveisgreen
user.github=fiveisgreen
user.name=Anthony

In diesem Beispiel wird user.name zweimal aufgeführt. So entfernen Sie das Duplikat:

git config --global --unset user.name
Schröder
quelle
3
git config --global --replace-all user.email "[email protected]"funktioniert, wenn Sie doppelte Konfiguration haben
Babajide Prince
5

Um solche Dinge zu debuggen, können Sie diesen Befehl verwenden:

git config --list --show-origin

Es zeigt die Ursprungsdatei für jeden Konfigurationseintrag.
Beispielausgabe mit duplizierter core.autocrlfund unerwünschter C:\\ProgramData/Git/configDatei:

$ 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   [email protected]
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

Sie können dasselbe mit --systemund tun --global, um zu überprüfen, wo sich Ihre gitconfig-Dateien befinden:

git config --global --list --show-origin

Beispielausgabe:

file:C:/Users/john.doe/.gitconfig   user.name=John Doe
file:C:/Users/john.doe/.gitconfig   [email protected]
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
Luke
quelle
2

Dieser Thread hat mir sehr geholfen. Folgendes habe ich getan, um einen doppelten Schlüsseleintrag in meinen globalen Konfigurationseinstellungen aufzulösen. Windows 7. Ich habe nach einer Datei namens .gitconfig gesucht, die sich auf meinem System in / users / owner befindet. Ich habe es mit einem Texteditor (Atom) bearbeitet und die fehlerhafte Zeile entfernt.

Ich glaube, der doppelte Schlüssel wurde gesetzt, als ich meine E-Mail-Adresse versehentlich in Anführungszeichen gesetzt habe, während ich den Befehl git config verwendet habe. Zumindest zeigt dies mein Shell-Protokoll an. Ups!

user3133732 Ver. 2.1
quelle