В чем разница между `[github]` и `[github "user"]` в файле gitconfig?

У меня есть следующие два блока в моем gitconfig с реальной информацией вместо <placeholders>:

[github]
  user = <name>
  token = <token>
  email = <email address>
[github "user"]
  user = <name>
  token = <token>
  email = <email address>

Оба содержат одни и те же 3 значения. Я думаю, что это ненужное дублирование, но в чем разница, и что я должен удалить? Это не вызывает никаких проблем, как есть.

Кроме того, у меня также есть этот блок:

[user]
  name = <name>
  email = <email address>

Опять то же имя и адрес электронной почты.

Обновление: работает git config --list отображаемые значения для

github.user
github.token
github.email

так же как

github.user.user
github.user.token
github.user.email

что выглядело так неправильно для меня, я удалил всю [github "user"] заблокировать из моего файла. Ничто не кажется сломанным еще.

2 ответа

Решение

Насколько я знаю, этот синтаксис означает, что у вас есть github раздел и github "user" подраздел ( см. под синтаксисом). Это означает, что вы можете получить доступ github и вы также можете получить доступ github.user как вы заметили с --list, Таким образом, вы можете хранить разные значения. Поскольку ваши значения одинаковы, вы сможете удалить [github "user"] ничего не нарушая, как вы видели.

Примечание: остерегайтесь подразделов git config: Недавнее обновление до " git config "прервано обновление переменной в подразделе, которая была исправлена ​​с помощью Git 2.19 (3 ​​квартал 2018 года).

Это иллюстрирует разницу между разделом и подразделом.

Смотрите коммит bff7df7, коммит 2d84f13 (8 августа 2018 г.) и коммит 999d902 (01 августа 2018 г.). Автор Stefan Beller ( stefanbeller )
(Объединено Юнио С Хамано - gitster - в коммите 2a2c18f, 20 августа 2018 г.)

config: исправление чувствительных к регистру имен подразделов при записи

Пользователь сообщил о проблеме с подмодулем, касающейся смешения разделов, но это может быть сведено к следующему тестовому примеру:

$ git init test  && cd test
$ git config foo."Bar".key test
$ git config foo."bar".key test
$ tail -n 3 .git/config
[foo "Bar"]
      key = test
      key = test

Подразделы чувствительны к регистру, и у нас есть тест на правильное их чтение.
Однако у нас нет теста для правильной записи конфигурации с именами подразделов с учетом регистра, поэтому в 6ae996f это осталось незамеченным (git_config_set: использовать поток событий парсера конфигурации, 2018-04-09, Git 2.18)

К сожалению, мы должны различать конфигурацию старого стиля, которая выглядит следующим образом:

[foo.Bar]
      key = test

и новый цитируемый стиль, как видно выше.

Старый стиль задокументирован как независимый от регистра, поэтому мы должны сохранить strncasecmp "; хотя итоговая настройка для конфигурации старого стиля отличается от конфигурации.


Обязательно используйте Git 2.19 (как видно выше) или, по крайней мере, Git 2.13 или более.

Что не задокументировано, так это git -c используется в нижнем регистре имя переменной:

vonc@bvonc MINGW64 ~
$ git version
git version 2.12.0.windows.1

vonc@bvonc MINGW64 ~
$ git -c VAR=c config -l|grep var
var=c

Это может быть проблемой в ОС, где регистр переменной имеет значение (см. Также регистр URL ниже)

Это исправлено в Git 2.13 (Q2 2017), и это дает еще одну иллюстрацию различия между разделом и подразделом.

Смотрите коммит 1274a15 и коммит ee98df3 (23 февраля 2017 г.) от Junio ​​C Hamano ( gitster )
(Объединено Юнио С Хамано - gitster - в коммите 2f54451, 10 марта 2017 г.)

config: использовать git_config_parse_key() в git_config_parse_parameter()

Разбор одноразовых назначений переменных конфигурации, которые исторически исходили из командной строки, был довольно свободным и позволял что-либо проходить.

Он также преуменьшает все в имени переменной, даже трехуровневой <section>.<subsection>.<variable> имя, в котором часть должна обрабатываться с учетом регистра.

Пример трехуровневый <section>.<subsection>.<variable> Назовите, где регистр имеет значение, независимо от того, какая ОС установлена ​​при установке URL:

vonc@bvonc MINGW64 ~
$ git -c url."https://myserver/GitLab".insteadOf=git@myserver.org/GitLab config -l|grep -i Gitlab
url.https://myserver.org/gitlab.insteadof=git@myserver.org/GitLab

Если ваш частный URL-адрес Git-репо не в нижнем регистре... эта команда не будет работать.
В то время как схема URL может быть нечувствительна к регистру, а также домен, остальная часть URL (здесь /GitLab часть) может быть чувствительным к регистру.

Другие вопросы по тегам