Откуда берутся настройки в моей конфигурации Git?


Я заметил, что у меня есть 2 списка для core.autocrlf когда я запускаю git config -l

$ git config -l
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=name
user.email=email@example.com
core.autocrlf=true

те последние 3 (от user.name вниз) являются единственными в моем . Откуда берутся все остальные? Почему это ядро.перечисленные autocrlf в два раза?

это с msysgit 1.8.3, и у меня также установлен SourceTree (Windows 7). В SourceTree я снял флажок "Разрешить SourceTree изменять ваши глобальные файлы конфигурации Git"

5 64

5 ответов:

Git проверяет 4 места для файла конфигурации:

  1. система вашей машины .
  2. ваш файл находится по адресу ~/.gitconfig.
  3. второй пользовательский файл конфигурации, расположенный в $XDG_CONFIG_HOME/git/config или $HOME/.config/git/config.
  4. конфигурационный файл локального РЕПО .git/config.

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

  1. система настроек.
  2. Конфигурация пользователя.
  3. конфигурация для конкретного РЕПО.

вы можете увидеть, что каждый файл был определен с помощью следующих команд:

# System, applies to entire machine and all users
$ git config --system --list
$ git config --system --edit

# User defined
$ git config --global --list
$ git config --global --edit

вы можете увидеть, что только РЕПО-конкретный файл определил, открыв файл .git/config для этого РЕПО.

если вы используете msysgit на Windows, вы, вероятно, найдете своего пользователя ~/.gitconfig file where ever %homepath% при использовании echo %homepath% из командной строки Windows.

С документация git config:

если не установлено явно с --file, есть четыре файла, где git config будет искать варианты конфигурации:

  • $(prefix)/etc/gitconfig

    общесистемный конфигурационный файл.

  • $XDG_CONFIG_HOME/git/config

    второй пользовательский файл конфигурации. Если $XDG_CONFIG_HOME is не установлено и не пусто,$HOME/.config/git/config будет использоваться. Любой однозначная переменная, установленная в этом файле, будет перезаписана что бы ни было в ~/.gitconfig. Это хорошая идея, чтобы не создавать это файл, если вы иногда используете более старые версии Git, в качестве поддержки для этого файл был добавлен совсем недавно.

  • ~/.gitconfig

    пользовательский конфигурационный файл. Также называется "глобальная" конфигурация файл.

  • $GIT_DIR/config

    файл конфигурации конкретного репозитория.

если никакие более дополнительные варианты не даются, то все варианты чтения прочитают все эти файлы, которые доступны. Если глобальный или общесистемный файл конфигурации недоступен они будут проигнорированы. Если файл конфигурации репозитория недоступен или недоступен для чтения, git config завершается с ненулевым кодом ошибки. Однако, ни в одном случае будет ли выдано сообщение об ошибке.

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

все параметры записи будут по умолчанию записываться в конкретный репозиторий конфигурационный файл. Обратите внимание, что это также влияет на такие параметры, как --replace-all и --unset. git configбудет только когда-нибудь изменить по одному файлу за раз.

вы можете переопределить эти правила либо по параметрам командной строки, либо по переменная окружения. Элемент --global и --system опции ограничьте используемый файл глобальным или общесистемным файлом соответственно. Элемент GIT_CONFIG переменная окружения имеет аналогичный эффект, но вы можете указать любое имя вы хотите.

вам больше не нужно угадывать, какая конфигурация была установлена на где, с git 2.8! (Март 2016 года)

посмотреть совершить 70bd879, commit 473166b,совершить 7454ee3,совершить 7454ee3 (19 февраля 2016), commit 473166b,совершить 7454ee3 (19 февраля 2016), совершить 7454ee3 (19 февраля 2016), и commit a0578e0 (17 февраля 2016) by Ларс Шнайдер (larsxschneider).
(слитый Junio C Hamano--gitster-- in commit dd0f567, 26 февраля 2016)

config: добавить'--show-origin ' возможность печати источника значения конфигурации

если значения конфигурации запрашиваются с помощью 'git config' (например, через --get, --get-all,--get-regexp или --list флаг), то это иногда трудно найдите файл конфигурации, в котором были определены значения.

учитьgit config 'the'--show-origin ' возможность печати источника файл конфигурации для каждого напечатанного значения.

The git config на странице will теперь указывает:

--show-origin:

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

для пример:

git config --list --show-origin

что вернется:

    file:$HOME/.gitconfig   user.global=true
    file:$HOME/.gitconfig   user.override=global
    file:$HOME/.gitconfig   include.path=$INCLUDE_DIR/absolute.include
    file:$INCLUDE_DIR/absolute.include  user.absolute=include
    file:.git/config    user.local=true
    file:.git/config    user.override=local
    file:.git/config    include.path=../include/relative.include
    file:.git/../include/relative.include   user.relative=include
    command line:   user.cmdline=true

для одной установки, как прокомментировал by wisbucky:

git config --show-origin --get-all core.autocrlf

    file:"D:\prgs\git\latest\mingw64/etc/gitconfig"     true
    file:C:/Users/vonc/.gitconfig   false

после предварительной установки Git для Windows и впоследствии удалить его, я обнаружил, что есть файл конфигурации установлен на C:\Users\All Users\Git\config, который является конфигурационным файлом системного уровня, который сохраняется и будет влиять на любые будущие пакеты mingw32 git (в моем случае я запускал портативный пакет mingw32 git, предоставленный моей компанией). Когда я бежал

git config --system --edit

он покажет мне файл конфигурации системы, расположенный в mingw32 / etc / gitconfig, но по-прежнему будет загружать значения из первого местоположения. Это появилось как предупреждение о том, что значения конфигурации столкнулись при попытке использовать Git lfs

WARNING: These git config values clash:
  git config "http.sslcainfo" = "C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt"
  git config "http.sslcainfo" = "/ssl/certs/ca-bundle.crt"

(Примечание: это также может быть ситуация, когда предупреждения lfs слишком настойчивы #861)

git config-l показывает все унаследованные значения от: system, global и local.

таким образом, у вас есть еще один конфигурационный файл, который загружается вместе с вашим пользователем .gitconfig

Если вы хотите найти, чтобы найти фактическое местоположение файла, он будет в вашем домашнем каталоге.

Он скрыт и предшествует".".

Так что если вы находитесь на Mac, в вашем терминале вы можете cd ~ && open .gitconfig или откройте его с помощью вашего любимого текстового редактора, например cd ~ && atom .gitconfig.