2015-12-05 1 views
13

Na Git 2.6.3 na Windows, dlaczego ten wynik polecenia:Dlaczego Git lista config (łącznie) nie jest taki sam jak system globalny + + lokalnego

git config --list 

nie jest taka sama jak tych innych:

git config --list --system 
git config --list --global 
git config --list --local 

Pierwsza zawiera kilka innych opcji niż suma pozostałych. Przekierowałem do plików i porównałem kdiff i są różnice.

Zgodnie z wnioskiem jest to, że wartości są w git config --list a nie w systemie/global/local pogrupowane:

core.symlinks=false 
core.autocrlf=true 
color.diff=auto 
color.status=auto 
color.branch=auto 
color.interactive=true 
pack.packsizelimit=2g 
help.format=html 
http.sslcainfo=C:/Program Files (x86)/Git/mingw32/ssl/certs/ca-bundle.crt 
sendemail.smtpserver=/bin/msmtp.exe 
diff.astextplain.textconv=astextplain 
rebase.autosquash=true 

Gdzie że config cytowany powyżej (nie w systemie/global/local) wartości zapisane?

+4

Czy możesz podzielić się różnicami między plikami? – Whymarrh

Odpowiedz

15

TL; DR: C:\Users\All Users\Git\config.
Zobacz git-for-windows PR 470

na Windows, jak nie ma centralnego /etc/ katalogu, jest jeszcze inny plik konfiguracyjny (znajduje się na %PROGRAMDATA%\Git\config), przeznaczony do przechowywania ustawienia wszystkie Git związanego oprogramowania zainstalowanego na komputerze .
W związku z tym plik konfiguracyjny ma jeszcze niższy priorytet niż plik $(prefix)/etc/gitconfig.

Można sprawdzić, że (z 2.8+ git, marzec 2016), wpisując

git config --list --show-origin 

Patrz "Where do the settings in my Git configuration come from?"


Jak wspomniano w git config FILES, git poszukuje wartości (lub wartości domyślne, jeśli nie znaleziono) konfiguracji w 3 miejscach (poza samym repozytorium git)

$(prefix)/etc/gitconfig 

Systemowy plik konfiguracyjny.

$XDG_CONFIG_HOME/git/config 

Drugi plik konfiguracyjny dla konkretnego użytkownika.
Jeśli $XDG_CONFIG_HOME nie jest ustawiony lub pusty, zostanie użyty $HOME/.config/git/config. Każda zmienna jednowartościowa ustawiona w tym pliku zostanie nadpisana przez to, co jest w ~/.gitconfig. Dobrym pomysłem jest nie tworzyć tego pliku, jeśli używasz starszych wersji Gita, ponieważ wsparcie dla tego pliku zostało dodane całkiem niedawno.

~/.gitconfig 

konkretnego użytkownika plik konfiguracyjny. Zwany również "globalnym" plikiem konfiguracyjnym.

Ale quick process monitor wspomina czwarty miejsce (ponownie, poza samą repo git)

programdata

W C:\ProgramData\Git widzę dodatkowe wartości:

C:\ProgramData\Git>more config 
[core] 
     symlinks = false 
     autocrlf = true 
[color] 
     diff = auto 
     status = auto 
     branch = auto 
     interactive = true 
[pack] 
     packSizeLimit = 2g 
[help] 
     format = html 
[http] 
     sslCAInfo = C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt 
[sendemail] 
     smtpserver = /bin/msmtp.exe 

[diff "astextplain"] 
     textconv = astextplain 
[rebase] 
     autosquash = true 

As wspomniano w "What is the significance of the ProgramData folder in Windows?", ten folder to ten z All Users:

C:\Users\All Users\Git>dir 
Volume in drive C has no label. 

Directory of C:\Users\All Users\Git 

23/10/2015 16:36 <DIR>   . 
23/10/2015 16:36 <DIR>   .. 
23/10/2015 16:36    350 config 
0

Git odczytuje wartości z trzech różnych plików konfiguracyjnych.

  1. System - Wartości konfiguracyjne w tym pliku są stosowane do wszystkich użytkowników urządzenia.
  2. Globalna - Wartości konfiguracyjne w tym pliku są stosowane do pojedynczego użytkownika. Ten plik znajduje się w "~/.gitconfig". Ten plik może być użyty do nadpisania wartości konfiguracyjnej ustawionej przez plik konfiguracji systemu.
  3. Lokalne - wartości w tym pliku dotyczą jednego repozytorium. Ten plik znajduje się w ".git/config". Ten plik może być używany do nadpisywania wartości konfiguracyjnych ustawionych przez pliki konfiguracyjne globalne i systemowe.

Na przykład, możesz skonfigurować serwer git zainstalować użyć swojego adresu email

git config --global user.email [email protected] 

Teraz pracują nad projektem. Ten konkretny projekt wymaga użycia innego adresu e-mail [email protected] Ale wszystkie pozostałe projekty nadal używają [email protected] Można ustawić adres e-mail dla danego repozytorium przy

git config --local user.email [email protected] 

Git odczytuje wszystkie trzy pliki konfiguracyjne i łączy wartości konfiguracji ze wszystkich plików wymyślić ostatecznego zestawu wartości konfiguracyjnych. Jeśli git nie znajdzie wartości dla wymaganych zmiennych konfiguracyjnych git w ostatecznym zestawie wartości konfiguracyjnych, użyje domyślnych wartości wewnętrznych dla zmiennych.

+0

Przeczytaj ponownie pytanie i wybraną odpowiedź. To bardzo pouczające. – ferpega