Zauważyłem, że mam dwie oferty, core.autocrlf
kiedy biegamgit 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
[email protected]
core.autocrlf=true
Te ostatnie trzy (od user.name w dół) są jedynymi w moim C:\users\username\.gitconfig
pliku. Skąd pochodzą wszystkie inne? Dlaczego plik core.autocrlf jest wymieniony dwukrotnie?
Dotyczy to MSysGit 1.8.3, mam też zainstalowane oprogramowanie Sourcetree (Windows 7). W Sourcetree odznaczyłem opcję „Zezwalaj Sourcetree na modyfikowanie globalnych plików konfiguracyjnych Git”
git
msysgit
git-config
RyanW
źródło
źródło
git config --list --show-origin
nie będziesz musiał zgadywać, która konfiguracja git jest gdzie. Zobacz moją odpowiedź poniżejOdpowiedzi:
Git sprawdza cztery miejsca dla pliku konfiguracyjnego:
.gitconfig
Plik systemowy twojego komputera ..gitconfig
plik użytkownika znajduje się pod adresem~/.gitconfig
.$XDG_CONFIG_HOME/git/config
lub$HOME/.config/git/config
..git/config
.Ustawienia są kaskadowe w następującej kolejności, a każdy plik dodaje lub zastępuje ustawienia zdefiniowane w pliku nad nim.
Możesz zobaczyć, co zdefiniowano w każdym pliku, używając następujących poleceń:
# 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
Możesz zobaczyć, co zdefiniował tylko plik specyficzny
.git/config
dla repozytorium, otwierając plik dla tego repozytorium.Jeśli używasz MSysGit w systemie Windows, prawdopodobnie znajdziesz swój
~/.gitconfig
plik użytkownika wszędzie tam, gdzie%homepath%
wskazuje, jeśli używaszecho %homepath%
z wiersza poleceń systemu Windows.Z dokumentacji dla
git config
:źródło
.gitconfig
plik systemowy maszyny ” w systemie Windows z msysgit?C:\Program Files (x86)\Git\etc\gitconfig
. Nie jestem pewien, czy to właściwy.C:\Program Files\Git\mingw64\etc\gitconfig
C:\Program Files\Git\etc\gitconfig
Nie musisz już zgadywać, która konfiguracja została ustawiona na gdzie, dzięki git 2.8! (Marzec 2016)
Zobacz zatwierdzenie 70bd879 , zatwierdzenie 473166b , zatwierdzenie 7454ee3 , zatwierdzenie 7454ee3 (19 lutego 2016 r.), Zatwierdzenie 473166b , zatwierdzenie 7454ee3 (19 lutego 2016 r.), Zatwierdzenie 7454ee3 (19 lutego 2016 r.) I zatwierdzenie a0578e0 (17 lutego 2016 r.) Autorstwa Larsa Schneidera (
larsxschneider
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu dd0f567 , 26 lutego 2016 r.)Strona
git config
podręcznika będzie teraz wskazywać:Na przykład:
To wróci:
Na jednym ustawieniu, jak skomentował przez wisbucky :
W Git 2.26 (Q1 2020) możesz dodać
--show-scope
opcję :źródło
user.cmdline=true
jest to wymagane--show-origin
do pracy? Zauważyłem też, że--show-origin
musi to nastąpić natychmiast po,config
aby móc pracować z--get
i--get-all
. Tak powinno być... config --show-origin --get-all core.autocrlf
-c 'user.cmdline=true'
bit, który wydaje się odnosić do zakresu testowego: github.com/git/git/blob/ ...user.cmdline=true
konieczne w Git 2.13, ale nie jest już potrzebne w Git 2.15.Po wcześniejszym zainstalowaniu Git dla Windows, a następnie odinstalowaniu go, stwierdziłem, że jest zainstalowany plik konfiguracyjny, w
C:\Users\All Users\Git\config
którym jest plik konfiguracyjny na poziomie systemu, który utrzymuje się i będzie wpływał na przyszłe pakiety MinGW32 Git (w moim przypadku korzystałem z przenośnego MinGW32 Pakiet Git dostarczony przez moją firmę). Kiedy biegałempokazałby mi plik konfiguracyjny systemu znajdujący się pod adresem
mingw32/etc/gitconfig
, ale nadal ładowałby wartości z pierwszej lokalizacji. Pojawiło się to jako ostrzeżenie, że wartości konfiguracyjne kolidowały podczas próby użycia Git LFS .(Uwaga: może to być również sytuacja, w której ostrzeżenia LFS są zbyt asertywne, # 861 )
źródło
Możesz użyć
--show-origin
, aby dowiedzieć się, skąd pochodzą konfiguracje.Priorytet plików konfiguracyjnych w Git dla Windows:
Źródło: https://github.com/git-for-windows/git/blob/master@%7B2018-01-07%7D/Documentation/git-config.txt#L231
$PROGRAMDATA
jest zmienną środowiskową. Możesz uzyskać wartość tych zmiennych w następujący sposób:W Git Bash musisz użyć
echo "$ProgramData"
. W CMD musisz użyćecho %PROGRAMDATA%
. Zauważ, że Git Bash najwyraźniej udaje, że zmienne środowiskowe uwzględniają wielkość liter.Co to jest
$(prefix)
?Prefiks to katalog najwyższego poziomu, w którym instalowane są rzeczy. W Git dla Windows jest to albo
<some-path>/mingw64
albo<some-path>/mingw32
.źródło
git config -l
pokazuje wszystkie wartości odziedziczone z systemu, globalne i lokalne.Więc masz gdzieś inny plik konfiguracyjny, który jest ładowany wraz z
.gitconfig
plikiem zdefiniowanym przez użytkownika.źródło
Pełna odpowiedź dla systemu Windows (tj. Wersja zaakceptowanej odpowiedzi dla systemu Windows):
Podobnie jak Linux, Windows ma cztery poziomy plików / ustawień konfiguracyjnych, a trzy są bezpośrednimi odpowiednikami. Ważną rzeczą, na którą należy zwrócić uwagę, jest druga - „Wszystkie aplikacje / użytkownicy” - zwłaszcza, że to tutaj instalator ustawia wartości, np. „Core.autocrlf = true”, a mimo to nie można uzyskać do niego dostępu z wiersza poleceń więc powoduje zamieszanie.
Wszystkie aplikacje i użytkownicy
Przypomina to udostępnioną wersję ustawień „systemowych” w przypadku, gdy masz zainstalowanych wiele aplikacji Git. Nie ma polecenia „git config”, aby uzyskać do nich dostęp, ale nadal mają one wpływ na wynik netto dla ustawienia.
Lokalizacja pliku konfiguracyjnego:
C: \ ProgramData \ Git \ config
(Zwróć uwagę, że „ProgramData” to „Wszyscy użytkownicy” w starszych wersjach systemu Windows).
System
Lokalizacja pliku konfiguracyjnego: C: / Program Files / Git / mingw64 / etc / gitconfig
Użytkownik
Lokalizacja pliku konfiguracyjnego:% USERPROFILE% .gitconfig (jest to zastępowane jako „C: / Users / <nazwa użytkownika>”)
Magazyn
Lokalizacja pliku konfiguracyjnego: [bieżący katalog repozytorium] /. Git / config
źródło
Oprócz tego
git config -l --show-origin
, co przedstawiłem tutaj , z gitem 2.8 (marzec 2016), masz teraz, z Git 2.26 (Q1 2020)git config
nauczyłem się pokazywać, w którym „scope
” oprócz którego pliku pochodzi każde ustawienie konfiguracyjne.Zobacz commit 145d59f , commit 9a83d08 , commit e37efa4 , commit 5c105a8 , commit 6766e41 , commit 6dc905d , commit a5cb420 (10 lutego 2020) i commit 417be08 , commit 3de7ee3 , commit 329e6ec (24 stycznia 2020) Matthew Rogers (
ROGERSM94
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 5d55554 , 17 lutego 2020 r.)Przykład:
źródło
W systemie Windows 7 (może takim samym lub podobnym dla systemu Windows 10), w przypadku programu Visual Studio i wiersza poleceń Git, Twoja globalna konfiguracja jest następująca:
(kropka przed nazwą pliku)
Ale to nie jest honorowane przez Sourcetree, przynajmniej w trybie Git Embedded, a konfiguracja jest następująca:
(brak kropki przed nazwą pliku)
(Musiałem zaktualizować oba pliki, aby zmodyfikować moje globalne ustawienia Git dla polecenia Git i Sourcetree.)
Kolejna fajna część. Konfiguracja hooków Git działała z
AppData\Local\...
lokalizacji, ale po dalszych badaniach za pośrednictwem Process Monitor zauważyłem, że Sourcetree w jakiś sposób ładuje również globalny dysk firmowy dla mojego użytkownika.Ma to bardzo mało sensu, ponieważ bardzo niewiele aplikacji wyszukuje tę lokalizację, ale w jakiś sposób Sourcetree to robi, więc jeśli nie możesz zmusić go do pracy według ustawień lokalizacji w Sourcetree, uruchom Process Monitor i utwórz regułę, aby rejestrować tylko ścieżkę zawierającą gitconfig, a ty może znaleźć, gdzie naprawdę jest twoja globalna konfiguracja w przypadku katalogu użytkownika mapowanego na sieć.
I może to nie być nawet wina Sourcetree, ponieważ widzę teraz, pisząc to, że git.exe to ładuje, ale dzieje się tak tylko w przypadku git.exe wykonywanego przez Sourcetree, podczas gdy bezpośredni wiersz poleceń Git używa
%USERPROFILE%\.gitconfig
W końcu wziąłem wszystkie wyniki z Process Monitor, wrzuciłem je do SQL Server i uruchomiłem zapytanie, aby uzyskać różne wyniki (bez określonej kolejności wykonywania tylko posortowane według ścieżki):
Nie wiem, jak te konfiguracje odnoszą się do siebie, ale wiem, że niektóre zastępują inne, niektóre ustawienia działają z jednej lokalizacji, a inne z drugiej.
Powyższa lista jest wywoływana przez Sourcetree , ponownie skieruj wiersz poleceń za pomocą Gita wydaje się działać dobrze
%USERPROFILE%\.gitconfig
, a tego nie ma na tej liście, ale wyglądałoby tak (w systemie Windows 7)C:\Users\pawel.cioch\.gitconfig
źródło
Jeśli chcesz znaleźć rzeczywistą lokalizację pliku, będzie to twój katalog domowy.
Jest ukryty i poprzedzony znakiem „.”.
Więc jeśli jesteś na Macu, w swoim terminalu możesz
cd ~ && open .gitconfig
lub otworzyć go za pomocą ulubionego edytora tekstu, npcd ~ && atom .gitconfig
.źródło