내 Git 구성의 설정은 어디에서 가져 오나요?


87

내가 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"를 선택 취소했습니다.


17
참고 : git 2.8 (2016 년 3 월) 및 git config --list --show-origin에서는 어떤 git config가 어디에 있는지 추측 할 필요가 없습니다. 아래 내 대답을
VonC

답변:


97

Git은 구성 파일의 네 위치를 확인합니다.

  1. 컴퓨터의 시스템 .gitconfig파일.
  2. 에있는 사용자 .gitconfig파일 ~/.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.

Windows에서 MSysGit을 사용 하는 경우 Windows 명령 프롬프트에서 사용하는 경우 가리키는 ~/.gitconfig위치에서 사용자 파일을 찾을 수 있습니다 .%homepath%echo %homepath%

에 대한 문서에서git config :

로 명시 적으로 설정하지 않은 경우 구성 옵션을 검색 할 --file4 개의 파일이 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환경 변수도 비슷한 효과를 가지고 있지만, 당신은 당신이 원하는 파일 이름을 지정할 수 있습니다.


3
.gitconfigmsysgit을 사용하는 Windows 에서 "시스템의 시스템 파일" 은 어디에 있습니까 ?
DanielSank 2014 년

3
@DanielSank 시도하십시오 C:\Program Files (x86)\Git\etc\gitconfig. 그것이 올바른지 확실하지 않습니다.

@Cupcake : 그래, 그게 다야. 어떤 이유로 나는 그 파일을 수정할 수 없습니다. 어떤 프로세스가 그것을 붙잡고 있습니다 ... 어떤 프로세스를 파악할 수 없습니다. 사용자 수준 구성에서 재정의 할 수 있기 때문에 중요하지 않은 것 같습니다. 감사.
DanielSank 2014 년

2
현재 Git 읽기C:\Program Files\Git\mingw64\etc\gitconfig
Kevin Smyth

1
@KevinSmyth이 최근 변경되었습니다C:\Program Files\Git\etc\gitconfig
Enrice

62

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 gitsterHamano -- in commit dd0f567 , 26 Feb 2016)

구성 : --show-origin구성 값의 출처를 인쇄하기 위해 ' '옵션을 추가 합니다.

설정 값이 '를 사용하여 조회하는 경우 git config'(예를 통해이 --get, --get-all, --get-regexp, 또는 --list플래그) 다음은 값이 정의 된 설정 파일을 찾기 위해 때로는 어렵습니다.

모든 인쇄 된 값에 대한 소스 구성 파일을 인쇄 git config하려면 ' --show-origin' ' '옵션을 가르치십시오 .

이제 git configman 페이지에 다음 내용 이 표시됩니다.

--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

Git 2.26 (2020 년 1 분기)에서는 다음 옵션을 추가--show-scope수 있습니다 .

git config -l --show-origin --show-scope

1
신에게 감사합니다. git configs가 저장된 위치를 추측하는 온라인 기사가 너무 많습니다. 모든 기사에서 내 컴퓨터에 설치 될 수있는 위치 (c : \ programdata \ git \ config)가 누락되었습니다. 왜 거기에 있는지 모르겠지만 Visual Studio의 TFS 통합이 의심됩니다. 내가 찾는 데 너무 많은 시간을 소비하는 다른 이상한 위치는 C : \ program files \ mingw64 \ etc \ .gitconfig 및 H : \. gitconfig입니다. 이 새로운 명령에 대해 신에게 감사합니다. 예수. 그리스도.
RMuesi

일하는 user.cmdline=true데 왜 필요한지 궁금 --show-origin합니다. 또한, 나는 것으로 나타났습니다 --show-origin필요 직후로 config를 사용하기 위해서 --get--get-all. 그래서 그것은... config --show-origin --get-all core.autocrlf
wisbucky

@wisbucky 동의 : -c 'user.cmdline=true'테스트 범위를 참조하는 것으로 보이는 비트를 제거합니다 : github.com/git/git/blob/…
VonC

@wisbucky 그리고 한 가지 설정에 대한 예를 포함했습니다.
VonC 2017

@VonC, Ah는 user.cmdline=trueGit 2.13에서 필요한 것처럼 보이지만 Git 2.15에서는 더 이상 필요하지 않습니다.
wisbucky

10

이전 에 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 )


이것은 매우 유용합니다. 모든 사용자에서 해당 파일을 찾지 못했을 것입니다. 그걸로 뭘 했어요?
T3rm1

1
C : \ Users \ All Users \ (C : \ ProgramData의 별칭) 및 C : \ Users \ foo \ AppData \ Local \ Programs \에서 'Git'폴더를 제거하여 나머지 구성 파일을 모두 제거했습니다.
jinxcat2008

3

--show-origin구성의 출처를 찾기 위해 사용할 수 있습니다 .

Windows 용 Git의 구성 파일 우선 순위 :

...

$PROGRAMDATA/Git/config::
(Windows 전용) 다른 Git 구현과 공유되는 시스템 전체 구성 파일입니다. 일반적으로 $PROGRAMDATA 가리키는 C:\ProgramData.

$(prefix)/etc/gitconfig::
시스템 전체 구성 파일. (Windows 전용)이 파일에는이 Windows 용 Git 설치와 관련된 설정 만 포함되며 JGit, libgit2와 같은 다른 Git 구현과 공유해서는 안됩니다. --system이 파일을 선택합니다.

$XDG_CONFIG_HOME/git/config::
두 번째 사용자 별 구성 파일입니다. 경우 $XDG_CONFIG_HOME설정하거나 비어 있지 않은, $HOME/.config/git/config사용됩니다. 이 파일에 설정된 단일 값 변수는 ~/.gitconfig. 이 파일에 대한 지원이 상당히 최근에 추가되었으므로 때때로 이전 버전의 Git을 사용하는 경우이 파일을 생성하지 않는 것이 좋습니다.

~/.gitconfig::
사용자 별 구성 파일. "글로벌"구성 파일이라고도합니다.

$GIT_DIR/config::
저장소 특정 구성 파일.

...

파일은 위에 주어진 순서대로 읽혀지며 마지막으로 찾은 값이 이전에 읽은 값보다 우선합니다.

...

출처 : https://github.com/git-for-windows/git/blob/master@%7B2018-01-07%7D/Documentation/git-config.txt#L231

$PROGRAMDATA환경 변수입니다. 다음과 같은 변수의 값을 얻을 수 있습니다.

Git Bash에서는 echo "$ProgramData". CMD에서는 echo %PROGRAMDATA%. Git Bash는 분명히 환경 변수가 대소 문자를 구분하는 척합니다.

무엇입니까 $(prefix)?

접두사는 사물이 설치되는 최상위 디렉토리입니다. Windows 용 Git에서는 <some-path>/mingw64또는 <some-path>/mingw32.


3

git config -l 시스템, 글로벌 및 로컬에서 상속 된 모든 값을 표시합니다.

따라서 사용자 정의 .gitconfig파일 과 함께로드되는 다른 구성 파일이 있습니다.


감사합니다. 귀하의 답변은 시스템과 글로벌의 차이점에 대한 단서가되었습니다. --system 플래그에 대한 @Cupcake의 답변은 파일을 찾는 데 도움이되었습니다.
RyanW

2

Windows에 대한 완전한 답변 (즉, 수락 된 답변의 Windows 버전) :

Linux와 마찬가지로 Windows에는 4 가지 수준의 구성 파일 / 설정이 있으며 3 가지 수준은 직접적으로 동일합니다. 주목해야 할 중요한 것은 다른 하나 ( '모든 앱 / 사용자')입니다. 특히 설치 프로그램이 값 (예 : 'core.autocrlf = true')을 설정하지만 명령 줄에서 액세스 할 수 없기 때문입니다. 그래서 혼란을 야기합니다.

모든 응용 프로그램 및 사용자

이는 여러 Git 애플리케이션이 설치된 경우 '시스템'설정의 공유 버전과 같습니다. 이에 액세스하는 'git config'명령은 없지만 설정의 최종 결과에 여전히 영향을 미칩니다.

구성 파일 위치 :

C : \ ProgramData \ Git \ config

( 'ProgramData'는 이전 버전의 Windows에서 '모든 사용자'였습니다.)

체계

구성 파일 위치 : C : / Program Files / Git / mingw64 / etc / gitconfig

$ git config --system --list

사용자

구성 파일 위치 : % USERPROFILE % .gitconfig (이는 'C : / Users / <username>'으로 확인 됨)

$ git config --global --list

저장소

구성 파일 위치 : [현재 저장소 디렉토리] /. git / config

$ git config --local --list

2

의 또한 git config -l --show-origin것을, 나는 여기에 제시된 자식 2.8 (2016 월)와 함께, 당신은 지금 힘내 2.26와 (Q1 2020),이

git config -l --show-scope

# you can combine both options:
git config -l --show-origin --show-scope

git configscope어떤 파일에서 각 구성 설정의 출처 인 " " 을 표시하는 방법을 배웠습니다 .

참조 145d59f 커밋 , 9a83d08 커밋 , e37efa4 커밋 , 5c105a8 커밋 , 6766e41 커밋 , 6dc905d 커밋 , a5cb420 커밋 (2020 2월 10일을), 및 417be08 커밋 , 3de7ee3 커밋 , 329e6ec 커밋 에 의해 (2020 1월 24일) 매튜 로저스 ( ROGERSM94) .
(Merged by Junio ​​C gitsterHamano -- in commit 5d55554 , 17 Feb 2020)

config: 구성 값의 범위를 인쇄하려면 '--show-scope'를 추가하십시오.

서명자 : Matthew Rogers

사용자가를 사용하여 구성 값을 쿼리 할 때 --show-origin실제 " scope"( local,global 주어진 값의 등)가 단지 원본 파일을 기반으로합니다.

'git config'에게 '--show-scope표시된 모든 구성 값의 범위를 인쇄하려면 '옵션을 주세요.

submodule-config.c'.gitmodules'파일을 구문 분석 할 때만 사용되는 "하위 모듈"범위는 절대 볼 수 없습니다 .

예:

git config -l --show-scope

global  user.global=true
global  user.override=global
global  include.path=$INCLUDE_DIR/absolute.include
global  user.absolute=include
local   user.local=true
local   user.override=local
local   include.path=../include/relative.include
local   user.relative=include

1

Windows 7 (Windows 10의 경우 동일하거나 유사 할 수 있음), Visual Studio 및 Git 명령 줄의 경우 전역 구성은 다음 위치에 있습니다.

%USERPROFILE%\.gitconfig

(파일 이름 앞에 점이 있음)

그러나 이것은 적어도 Git Embedded 모드에서 Sourcetree에 의해 존중되지 않으며 구성은 다음과 같습니다.

%USERPROFILE%\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig

(파일 이름 앞에 점 없음)

(Git 명령 및 Sourcetree에 대한 전역 Git 설정을 수정하려면 두 파일을 모두 업데이트해야했습니다.)

또 다른 재미있는 부분. Git 후크 구성은 AppData\Local\...위치 에서 작동 했지만 Process Monitor 를 통해 더 많은 연구를 마친 후 Sourcetree가 내 사용자를 위해 회사 매핑 된 드라이브에서 전역으로로드되는 것을 발견했습니다.

이 위치를 찾는 응용 프로그램이 거의 없기 때문에 이것은 의미가 거의 없지만 Sourcetree는 어떻게해서 든 Sourcetree에서 위치 설정별로 작동하도록 만들 수없는 경우 프로세스 모니터를 실행하고 gitconfig가 포함 된 경로 만 기록하는 규칙을 생성하면됩니다. 네트워크에 매핑 된 사용자 디렉터리의 경우 전역 구성이 실제로 어디에 있는지 찾을 수 있습니다.

그리고 이것은 Sourcetree의 잘못이 아닐 수도 있습니다. git.exe가로드하고 있다는 것을 제가 지금 쓰는 것처럼 보이지만 이것은 Sourcetree에 의해 실행되는 git.exe에 대해서만 발생하고 직접 명령 줄 Git은 %USERPROFILE%\.gitconfig

여기에 이미지 설명 입력

마지막으로 프로세스 모니터에서 모든 결과를 가져와 SQL Server에 입력하고 쿼리를 실행하여 고유 한 결과를 얻었습니다 (경로별로 정렬 된 특정 실행 순서 없음).

여기에 이미지 설명 입력

이러한 구성이 서로 어떻게 관련되어 있는지 모르겠지만 일부 설정이 다른 위치에서 일부 설정이 다른 위치에서 작동한다는 것을 알고 있습니다.

그리고 위의 목록은 Sourcetree의해 호출되며 Git을 사용하여 명령 줄을 다시 지시하는 것은 잘 작동하는 것처럼 보이며이%USERPROFILE%\.gitconfig 목록에는 없지만 다음과 같이 보일 것입니다 (Windows 7에서).C:\Users\pawel.cioch\.gitconfig


-1

실제 파일 위치를 찾으려면 홈 디렉토리에 있습니다.

숨겨져 있으며 앞에 "."가 붙습니다.

따라서 Mac을 사용하는 경우 터미널에서 cd ~ && open .gitconfig좋아하는 텍스트 편집기 (예 : cd ~ && atom .gitconfig.


1
이것은 이미 언급되었습니다. (비) 대안을 제안하여 혼란을 추가 할 필요가 없습니다.
Stim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.