Ответ 1
Это обсуждалось в этом потоке в 2013 году, запрошенном Себастьяном Шубертом, Джефф Кинг (Peff
) добавив:
Ожидаемый результат, безусловно, является проблемой, но проблема больше фундаментальный, чем это:
git config
даже не знает, что такое по умолчанию для любого данного варианта.Предполагается, что вызывающий абонент знает, что делать с неустановленным значением. А также это не связано с
git config
; внутренний код C работает таким же образом.
Фактические значения по умолчанию даже не обязательно выражаются через конфигурацию.
Например, я знаю, чтоhttp.receivepack
считает "неустановленным" быть отличным либо "true
", либо "false
", но установка его может привести только к одно из этих последних двух значений.
Я уверен, что есть и другие (я просто заметил это на этой неделе).
Я мог бы, конечно, увидеть аргумент, что мир станет лучшим местом если у кода была большая таблица опций и их описания, возможно значения и значения по умолчанию, и если мы использовали это для создания документации как а также подтверждение ввода.
Но никто не стал беспокоиться о том, чтобы построить эту таблицу и преобразовать всех вызывающих. И как отметил Jakub (Jakub Narębski), такая центральная таблица ничего не может сделать для внешних программ, которые сохраняют свою конфигурацию рядом с git.
Короче:
git config
даже не знает ни одного из параметров или значений, которыми он управляет, но просто является "немым" интерфейсом для написания/чтения всего, что вы проходите это в/из файла.
Примечание: git config был введен в commit 1771299 (git 0.99.9a, октябрь 2005 г.)
Различные программы могут реагировать на различные параметры конфигурации, хотя они должен всегда возвращаться к вызову "git_default_config()" в любой конфигурации имя параметра, которое они не распознают.
Таким образом, внутри есть способ загрузить конфигурацию по умолчанию, использованную еще как commit 72549df, git 2.2.0-rc1, ноябрь 2014, тем же Peff:
Когда мы запускаем программу git -fetch, мы вызываем git_config для загрузки всей конфигурации, но наш обратный вызов обрабатывает только параметр
fetch.prune
; мы не привязываемся кgit_default_config
вообще.Это означает, что мы не можем загружать некоторую конфигурацию ядра, которая будет иметь эффект. Например, мы не загружаем
core.logAllRefUpdates
, что влияет на то, будем ли мы создавать блокировки в открытом репозитории.Позвольте просто загрузить конфигурацию ядра в начале выборки, поэтому мы знаем, что у нас она есть
См. еще один пример с зафиксировать 3e1dd17, git 1.7.7-rc1, Aug. 2011 с настройкой цвета по умолчанию.