내 Git 구성의 설정은 어디에서 가져 오나요?
내가 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
마지막 세 개 (user.name 아래에서)는 내 C:\users\username\.gitconfig
파일 에있는 유일한 것입니다 . 다른 모든 것들은 어디에서 왔습니까? core.autocrlf가 두 번 나열되는 이유는 무엇입니까?
이것은 MSysGit 1.8.3과 함께 있으며 Sourcetree도 설치되어 있습니다 (Windows 7). Sourcetree에서 "Allow Sourcetree to modify your global Git config files"를 선택 취소했습니다.
Git은 구성 파일의 네 위치를 확인합니다.
- 컴퓨터의 시스템
.gitconfig
파일. - 에있는 사용자
.gitconfig
파일~/.gitconfig
. - 에있는 두 번째 사용자 별 구성 파일
$XDG_CONFIG_HOME/git/config
이나$HOME/.config/git/config
. - 로컬 저장소의 구성 파일
.git/config
.
설정은 다음 순서로 계단식으로 배열되며 각 파일은 위의 파일에 정의 된 설정을 추가하거나 재정의합니다.
- 시스템 설정.
- 사용자 구성.
- 저장소 별 구성.
다음 명령을 사용하여 각 파일이 정의한 내용을 볼 수 있습니다.
# 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
.
Windows에서 MSysGit을 사용 하는 경우 Windows 명령 프롬프트에서 사용하면 가리키는 ~/.gitconfig
위치에서 사용자 파일을 찾을 수 있습니다 .%homepath%
echo %homepath%
에 대한 문서에서git config
:
로 명시 적으로 설정하지 않은 경우 구성 옵션을 검색 할
--file
4 개의 파일이git config
있습니다.
$(prefix)/etc/gitconfig
시스템 전체 구성 파일.
$XDG_CONFIG_HOME/git/config
두 번째 사용자 별 구성 파일입니다. 경우
$XDG_CONFIG_HOME
설정하거나 비어 있지 않은,$HOME/.config/git/config
사용됩니다. 이 파일에 설정된 단일 값 변수는~/.gitconfig
. 이 파일에 대한 지원이 상당히 최근에 추가되었으므로 때때로 이전 버전의 Git을 사용하는 경우이 파일을 생성하지 않는 것이 좋습니다.
~/.gitconfig
사용자 별 구성 파일. "글로벌"구성 파일이라고도합니다.
$GIT_DIR/config
저장소 특정 구성 파일.
추가 옵션이 제공되지 않으면 모든 읽기 옵션이 사용 가능한 모든 파일을 읽습니다. 전역 또는 시스템 전체 구성 파일을 사용할 수없는 경우 무시됩니다. 저장소 구성 파일을 사용할 수 없거나 읽을 수
git config
없는 경우 0이 아닌 오류 코드와 함께 종료됩니다. 그러나 두 경우 모두 오류 메시지가 발행되지 않습니다.파일은 위에 주어진 순서대로 읽히고 마지막으로 찾은 값이 이전에 읽은 값보다 우선합니다. 여러 값을 가져 오면 모든 파일의 모든 키 값이 사용됩니다.
모든 쓰기 옵션은 기본적으로 저장소 특정 구성 파일에 기록됩니다. 이것은 또한 같은 옵션에 영향을줍니다
--replace-all
와--unset
.git config
한 번에 하나의 파일 만 변경합니다.명령 줄 옵션 또는 환경 변수로 이러한 규칙을 재정의 할 수 있습니다.
--global
과--system
옵션은 각각 전역 또는 전체 시스템 파일에 사용되는 파일을 제한합니다.GIT_CONFIG
환경 변수도 비슷한 효과를 가지고 있지만, 당신은 당신이 원하는 파일 이름을 지정할 수 있습니다.
git 2.8을 사용하면 어떤 구성이 어디에 설정되었는지 더 이상 추측 할 필요가 없습니다! (2016 년 3 월)
참조 70bd879 커밋 , 473166b 커밋 , 7454ee3 커밋 , 7454ee3 커밋 (2,016 19 이월) 473166b 커밋 , 7454ee3 커밋 (19 2,016 이월)는, 7454ee3 커밋 (2,016 19 이월) 및 a0578e0 커밋 그래피 (17 이월 2016) 라스 슈나이더 ( larsxschneider
) .
(Merged by Junio C gitster
Hamano -- in commit dd0f567 , 26 Feb 2016)
구성 :
--show-origin
구성 값의 출처를 인쇄하기 위해 ' '옵션을 추가 합니다.설정 값이 '를 사용하여 조회하는 경우
git config
'(예를 통해이--get
,--get-all
,--get-regexp
, 또는--list
플래그) 다음은 값이 정의 된 설정 파일을 찾기 위해 때로는 어렵습니다.모든 인쇄 된 값에 대한 소스 구성 파일을 인쇄
git config
하려면 '--show-origin
' ' '옵션을 가르치십시오 .
이제 git config
man 페이지에 다음 내용 이 표시됩니다.
--show-origin:
원본 유형 (파일, 표준 입력, Blob, 명령 줄) 및 실제 원본 (해당되는 경우 구성 파일 경로, 참조 또는 Blob ID)을 사용하여 쿼리 된 모든 구성 옵션의 출력을 확장합니다.
예를 들면 :
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
한 설정에 대해 같은 주석 에 의해 wisbucky :
git config --show-origin --get-all core.autocrlf
file:"D:\\prgs\\git\\latest\\mingw64/etc/gitconfig" true
file:C:/Users/vonc/.gitconfig false
이전 에 Windows 용 Git을 설치 하고 나중에 제거한 후 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 )
--show-origin
구성의 출처를 찾기 위해 사용할 수 있습니다 .
Configuration files priority in Git for Windows:
...
$PROGRAMDATA/Git/config
::
(Windows-only) System-wide configuration file shared with other Git implementations. Typically$PROGRAMDATA
points toC:\ProgramData
.
$(prefix)/etc/gitconfig
::
System-wide configuration file. (Windows-only) This file contains only the settings which are specific for this installation of Git for Windows and which should not be shared with other Git implementations like JGit, libgit2.--system
will select this file.
$XDG_CONFIG_HOME/git/config
::
Second user-specific configuration file. If$XDG_CONFIG_HOME
is not set or empty,$HOME/.config/git/config
will be used. Any single-valued variable set in this file will be overwritten by whatever is in~/.gitconfig
. It is a good idea not to create this file if you sometimes use older versions of Git, as support for this file was added fairly recently.
~/.gitconfig
::
User-specific configuration file. Also called "global" configuration file.
$GIT_DIR/config
::
Repository specific configuration file....
The files are read in the order given above, with last value found taking precedence over values read earlier.
...
$PROGRAMDATA
is an environment variable. You can get the value of those variables like this:
In Git Bash you need to use echo "$ProgramData"
. In CMD, you need to use echo %PROGRAMDATA%
. Note that Git Bash apparently pretends that environment variables are case sensitive.
What is $(prefix)
?
The prefix is the top-level directory into which things get installed. In Git for Windows, that's either <some-path>/mingw64
or <some-path>/mingw32
.
git config -l
shows all inherited values from system, global, and local.
So you have another configuration file somewhere that is being loaded along with your user-defined .gitconfig
file.
A complete answer for Windows (i.e. a Windows version of the accepted answer):
Like Linux, Windows has four levels of config files/settings and three are direct equivalents. The important thing to note is the other one - the 'All Apps/Users' one - particularly since this is where the installer sets values, e.g. 'core.autocrlf = true', and yet it can't be accessed from the command line so it causes confusion.
All Applications and Users
This is like a shared version of the ‘system’ settings in case you have multiple Git applications installed. There is no 'git config' command to access these, but they still impact the net result for a setting.
Configuration file location:
C:\ProgramData\Git\config
(Note that 'ProgramData' was 'All Users' on older versions of Windows.)
System
Configuration file location: C:/Program Files/Git/mingw64/etc/gitconfig
$ git config --system --list
User
Configuration file location: %USERPROFILE%.gitconfig (This resolves to 'C:/Users/<username>')
$ git config --global --list
Repository
Configuration file location: [current repository directory]/.git/config
$ git config --local --list
On Windows 7 (maybe the same or similar for Windows 10), for Visual Studio and the Git command line, your global configuration is in:
%USERPROFILE%\.gitconfig
(dot is in front of the file name)
But this is not honored by Sourcetree, at least in Git Embedded mode, and the configuration is in:
%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
(no dot in front of the file name)
(I needed to update both files to modify my global Git settings for Git command and Sourcetree.)
Another fun part. The Git hooks configuration was working from the AppData\Local\...
location, but after more research via Process Monitor, I noticed somehow Sourcetree is also loading global from company mapped drive for my user.
This makes very little sense as very few applications lookup this location, but somehow Sourcetree does, so if you can't make it to work per location settings at Sourcetree, run Process Monitor and create a rule to log only path containing gitconfig, and you can find where really your global configuration is in case of a network-mapped user directory.
And this may not be even fault of Sourcetree, as I see now as I write this that git.exe is loading that, but this happens only for git.exe executed by Sourcetree, while a direct command line Git uses %USERPROFILE%\.gitconfig
Finally I took all the results from Process Monitor, fed it into SQL Server and ran a query to get distinct results (no particular execution order just sorted by path):
I don't know how those configurations relate to each-other, but I know some override another some settings works from one location some from another.
And the above list is invoked by Sourcetree, again direct a command line with Git seems to work fine with %USERPROFILE%\.gitconfig
, and that is not on this list, but it would look like this (on Windows 7 ) C:\Users\pawel.cioch\.gitconfig
If you want to find to find the actual file location, it'll be in your home directory.
It is hidden and preceded with a ".".
So if you're on a Mac, in your terminal you can cd ~ && open .gitconfig
or open it with your favourite text editor, e.g cd ~ && atom .gitconfig
.
참고URL : https://stackoverflow.com/questions/17756753/where-do-the-settings-in-my-git-configuration-come-from
'Nice programing' 카테고리의 다른 글
Python Regex는 즉시 그룹을 대체합니다. (0) | 2020.10.09 |
---|---|
동일한 파일에서 프로젝트 이름 / 그룹 / 버전과 {source, target} 호환성을 설정하는 방법은 무엇입니까? (0) | 2020.10.09 |
MySql : 읽기 전용 옵션을 부여 하시겠습니까? (0) | 2020.10.09 |
Kotlin의`forEach`에서`break` 및`continue` (0) | 2020.10.09 |
실행 파일 잠금 : Windows는 그렇고 Linux는 그렇지 않습니다. (0) | 2020.10.09 |