Більше одного значення для ключа user.name Git


76

З якоїсь причини я отримую помилку, що "Більше одного значення для ключа user.name", коли я намагаюся встановити user.name для мого облікового запису git. Як я можу встановити його для одного імені?


Думаю, у мене схожа проблема. Але я не можу знайти тут відповіді. Я не впевнений, чому, і чи моє запитання буде продубльовано з цього. Цікаво, чи люди, які відповіли на це питання, готові прояснити проблему. Вивчаючи файли "локальний", "глобальний" та "налаштування", я бачу лише один user.nameу глобальному. Але git config --listі git 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

Відповіді:


54

Оновлення (грудень 2012 р.)

git1.8.1rc1 тепер працює по-іншому:

"git config --get" використовується для діагностики наявності декількох визначень однієї і тієї ж змінної в одному і тому ж файлі конфігурації як помилки, але тепер він застосовує правило "останній виграш", що використовується внутрішньою логікою конфігурації .

Власне кажучи, це може бути регресія API, але очікується, що це ніхто не помітить на практиці.


Оригінальна відповідь (листопад 2010 р.)

Сторінка користувача git config згадує:

Імена змінних не чутливі до регістру і допускаються лише буквено-цифрові символи та -.
Для даної змінної може бути більше одного значення; тоді ми говоримо, що змінна є багатозначною .

Насправді такі налаштування конфігурації (з декількома можливими значеннями) називаються multivar

Як пропонує Джефромі, подивіться, в якому з 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 2.8 (березень 2016 р.) , Ти можеш використовувати (для перегляду всіх налаштувань:

git config -l --show-origin

Один ви бачите , де дубліката установка (локальна, глобальна система), ви можете використовувати git config [--local/--global/--system] --replace-all key value, як в MB21 «и відповідь .


5
Якщо у вас є місцеве ім’я репозиторію, яке перевизначає глобальне ім’я користувача, git config --get-all user.nameвони надрукують їх обов’язково і не повідомлять, яке саме звідки прийшло. Тому я запропонував просто переглянути файли; здається простішим, ніж намагатися бути обережним щодо запитів за допомогою команди.
Cascabel

@Jefromi: ти маєш рацію, але ти можеш швидко усунути глобальну та системну конфігурацію за допомогою двох останніх запитів. У будь-якому випадку, я спочатку проголосував за вашу відповідь;)
VonC

4
Питання полягає в тому, "Як я можу встановити його для одного імені?" - Я не бачу відповіді вище?
Люк Пуплетт

@LukePuplett ви можете встановити його для одного імені, виконавши: a / зміну різних значень на одне і те ж на системному, глобальному та місцевому рівнях, або b / видалення зайвих значень, і зберігаючи лише один рівень. Кожного разу git config key valueзадіяно просте , але спочатку потрібно визначити значення на кожному рівні. Ось тут і з’являється моя відповідь.
VonC

@VonC У версії для Windows відбувається щось дивне. Установка глобальних параметрів для інструменту дифф просто додає все більше і більше до: V пари в файлі .gitconfig - stackoverflow.com/questions/13921687 / ...
Люк Puplett

134

Якщо ви просто хочете скинути їх усі:

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

9
Єдина відповідь, яка насправді відповідає на питання. +1
Даніель,

6
Якщо є налаштування локального сховища, це не скине їх. Повторіть команду без --globalпрапора, щоб скинути:git config --replace-all user.email "new@mail.com"
Unixmonkey

1
Це повинна бути головна відповідь
neilsimp1

1
Це єдина відповідь, яка відповідає на питання - ви маєте рацію. Він фактично видалив дублюючі записи завдяки @ mb21
Samuel Owino

1
Для мене це не працює для змінної 'core.autocrlf'. Він встановив той, що вказаний лише нижче.
Пенг на ZenUML.com

12

Вам слід вивчити вміст ~/.gitconfig(глобальної конфігурації користувача), а також .git/configвідповідного сховища (конфігурація для репо). Ви повинні побачити два nameрядки під userрозділом в одному з них. (Це також можуть бути два окремі розділи користувача в одному файлі.) Просто видаліть той, який ви не хочете, і ви повинні бути готові до роботи.

Ви також можете встановити його безпосередньо, git config --global user.name "Desired name"якщо хочете, щоб це було глобальне налаштування (ймовірно, так це), або те саме мінус --globalдля параметра, що стосується репо - але, мабуть, найкраще перевірити файли та знайти винуватця самостійно, щоб зробити впевнений, ти знаєш, що маєш. Спеціальний репо замінить глобальний. В ідеалі ви повинні встановлювати своє ім'я глобально, і замінювати його в проекті лише з поважної причини.


Я спостерігав кілька імен у .gitconfig і оновлював їх до одного значення. А потім призначено глобально, як ви згадали в / etc / bashrc / Це взяло нове значення з глобальної конфігурації. Дякую.
kumar

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

Спочатку подивіться, що таке імена користувачів. У конфігурі:

git config --list

Приклад виводу:

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

У цьому прикладі ім'я користувача ім'я вказано двічі. Щоб видалити дублікат:

git config --global --unset user.name

3
git config --global --replace-all user.email "Prince.Agbebiyi@me.com"працює, якщо у вас є дублікат конфігурації
Babajide Prince

2

Ця тема мені дуже допомогла. Ось що я зробив, щоб вирішити дубльований запис ключа в моїх глобальних налаштуваннях конфігурації. Windows 7. Я шукав файл .gitconfig, який знаходився в / users / owner у моїй системі. Я відредагував його за допомогою текстового редактора (Atom) і видалив порушувальний рядок.

Я вважаю, що повторюваний ключ було встановлено, коли я ненароком уклав свою електронну адресу в лапки під час використання команди git config, принаймні це вказує мій журнал оболонки. Ой!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.