Git 구성 범위: 전역, 시스템 및 저장소별 설정 설명

Git 시스템, 전역 및 로컬 구성 범위, 위치, 우선 순위가 설정에 미치는 영향을 이해합니다.

Git 구성 범위: 전역, 시스템 및 저장소별 설정 설명

Git 구성 범위는 Git이 예상과 다른 이름, 이메일, 편집기, 병합 도구 또는 기본 브랜치를 사용하는 이유를 설명합니다. 동일한 키가 여러 파일에 존재할 수 있으며, 더 구체적인 파일이 우선합니다.

시스템, 전역 및 로컬 설정이 어디에 있는지 알면 실수로 시스템의 모든 저장소를 변경하지 않고 개인 기본값을 설정할 수 있습니다.

Git 구성 계층 구조: 우선 순위 순서

Git은 여러 위치에서 구성 설정을 읽으며, 이러한 위치는 특정 우선 순위 순서로 처리됩니다. 동일한 구성 키가 둘 이상의 범위에서 정의된 경우, 더 구체적인 범위의 설정이 덜 구체적인 범위의 설정을 재정의합니다. 이 계층 구조는 예측 가능한 동작을 위해 이해하는 것이 중요합니다.

  1. 저장소별(로컬) 구성: 이러한 설정은 특정 저장소의 .git/config 파일 내에 저장됩니다. 가장 구체적이며 전역 및 시스템 설정보다 우선합니다. 프로젝트별 규칙에 이상적입니다.
  2. 전역(사용자) 구성: 이러한 설정은 시스템의 특정 사용자 계정과 연결된 모든 저장소에 적용됩니다. Linux/macOS에서는 ~/.gitconfig, Windows에서는 C:\Users\<username>\.gitconfig 파일에 저장됩니다. 전역 설정은 시스템 설정을 재정의합니다.
  3. 시스템 수준 구성: 이러한 설정은 시스템의 모든 사용자와 모든 저장소에 적용됩니다. 일반적으로 Linux/macOS에서는 /etc/gitconfig, Windows에서는 C:\Program Files\Git\etc\gitconfig에서 찾을 수 있습니다. 시스템 설정은 가장 덜 구체적이며 전역 및 로컬 설정에 의해 재정의됩니다.

참고: Git은 사용자 수준 구성 파일로 $XDG_CONFIG_HOME/git/config 또는 ~/.config/git/config를 읽을 수도 있습니다. 해당 파일과 ~/.gitconfig가 모두 존재하는 경우 Git은 둘 다 읽습니다. ~/.gitconfig의 값은 일반적으로 나중에 읽히므로 우선합니다.

1. 시스템 수준 구성 (--system)

시스템 수준 구성은 가장 광범위한 범위로, 특정 시스템의 모든 Git 사용자와 모든 저장소에 영향을 미칩니다. 이러한 설정은 일반적으로 시스템 전체 기본값 또는 시스템 관리자가 시행하는 정책에 사용됩니다.

저장 위치

  • Linux/macOS: /etc/gitconfig
  • Windows: C:\Program Files\Git\etc\gitconfig (설치에 따라 경로가 다를 수 있음)

사용 시기

  • 시스템 전체 기본값: 모든 사용자에 대한 기본 core.editor 또는 color.ui 설정.
  • 회사 전체 정책: 공유 시스템의 모든 개발자가 특정 Git 동작을 준수하도록 보장.
  • 보안 설정: 모든 사용자에 대해 특정 안전하지 않은 작업 비활성화.

실제 예제

모든 시스템 수준 설정 보기:

git config --system --list

시스템 전체 기본 사용자 이름 설정(관리자 권한 필요):

sudo git config --system user.name "Default Git User"

시스템 전체 기본 텍스트 편집기 구성:

sudo git config --system core.editor "nano"

경고: 시스템 수준 구성을 수정하려면 관리자 권한이 필요하며 시스템의 모든 Git 사용에 영향을 미칩니다. 필요한 경우에만 주의하여 사용하십시오.

2. 전역 수준 구성 (--global)

전역 구성은 사용자별로, 특정 시스템의 사용자 계정에서 상호 작용하는 모든 Git 저장소에 적용됩니다. 개인 설정에 가장 일반적인 범위입니다.

저장 위치

  • Linux/macOS: ~/.gitconfig
  • Windows: C:\Users\<username>\.gitconfig

사용 시기

  • 개인 신원: 모든 커밋에 기본으로 사용될 user.nameuser.email 설정.
  • 선호하는 별칭: 자주 사용하는 Git 명령어에 대한 단축키 정의.
  • 기본 UI 기본 설정: color.uiauto로 설정하거나 선호하는 텍스트 편집기(core.editor) 구성.
  • 기본 브랜치 동작: 예: pull.rebase.

실제 예제

모든 전역 수준 설정 보기:

git config --global --list

전역 사용자 이름 및 이메일 설정(모든 Git 사용자에게 권장되는 첫 번째 단계):

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

git status에 대한 전역 별칭 생성:

git config --global alias.st "status"

이제 git st를 입력하여 git status를 실행할 수 있습니다.

선호하는 편집기 설정:

git config --global core.editor "code --wait"

이렇게 하면 VS Code가 커밋 메시지와 같은 Git 작업의 기본 편집기로 설정됩니다.

: 커밋이 올바르게 귀속되도록 항상 전역 user.nameuser.email을 일찍 설정하십시오.

3. 저장소별(로컬) 구성

저장소별 또는 로컬 구성은 가장 세분화되어 있습니다. 이러한 설정은 현재 작업 중인 특정 Git 저장소에만 적용됩니다. 단일 프로젝트의 고유한 요구 사항에 맞게 Git 동작을 조정하는 데 중요합니다.

저장 위치

  • Git 저장소의 루트 디렉토리 내 .git/config 파일 내부.

사용 시기

  • 프로젝트별 신원: 업무 프로젝트와 개인 프로젝트에 대해 다른 이메일 주소 사용(예: 업무는 [email protected], 개인은 [email protected]).
  • 프로젝트별 훅: 저장소에 고유한 pre-commit 또는 post-merge 훅 구성.
  • 원격 URL: 여러 원격 또는 특정 푸시/풀 URL 정의.
  • 브랜치별 설정: 예: branch.<name>.remote 또는 branch.<name>.merge 설정.
  • 핵심 구성: 코딩 표준에 따라 특정 프로젝트에 대해 core.autocrlf 또는 core.whitespace 설정.

실제 예제

먼저 저장소의 루트 디렉토리로 이동합니다.

모든 로컬 수준 설정(및 상속된 전역/시스템 설정) 보기:

git config --list

전역 이메일을 재정의하는 프로젝트별 이메일 주소 설정:

git config user.email "[email protected]"

특정 프로젝트에 대해 git fetch 또는 git pull 중 수신된 객체 확인:

git config fetch.fsckObjects true

이 프로젝트에 특정한 로컬 별칭 설정(예: 복잡한 프로젝트별 명령어):

git config alias.log-compact "log --pretty=oneline --abbrev-commit --graph"

모범 사례: 다른 저장소에 영향을 주지 않아야 하는 설정에는 로컬 구성을 사용하십시오. 이렇게 하면 전역 설정이 깔끔하게 유지되고 관련 없는 프로젝트에 실수로 영향을 미치는 것을 방지할 수 있습니다.

구성 설정 보기

--list 외에도 개별 구성 키를 검사하거나 범위를 직접 지정할 수 있습니다.

모든 설정 보기 (--list)

현재 컨텍스트에 적용되는 모든 구성(시스템, 전역 및 로컬 설정 포함)과 우선 순위에 따라 해결되는 방식을 보려면:

git config --list --show-origin

이 명령은 키-값 쌍뿐만 아니라 각 설정이 시작된 파일도 표시하므로 매우 유용합니다. 이는 어떤 설정이 우선하는지 확실하지 않을 때 디버깅에 큰 도움이 됩니다.

특정 키 보기

특정 구성 키(예: user.name)의 값을 확인하려면:

git config user.name

Git은 계층 구조에 따라 해결된 유효 값을 반환합니다.

특정 범위에서 특정 키의 값을 확인하려면:

git config --global user.name # 전역 user.name만 표시
git config --system core.editor # 시스템 core.editor만 표시

충돌 및 우선 순위 해결

Git이 충돌을 해결하는 방법을 이해하는 것은 예기치 않은 동작을 해결하는 데 중요합니다. 저장소 내에서 git config --list를 실행하면 Git은 유효 설정을 표시합니다. user.email이 전역 및 로컬로 설정된 경우 로컬 설정이 우선하므로 표시됩니다.

예를 들어 설명하겠습니다:

  1. 시스템: /etc/gitconfiguser.name = "System Default User"
  2. 전역: ~/.gitconfiguser.name = "My Global Name"user.email = "[email protected]"
  3. 로컬: .git/configuser.name = "Project Specific User"user.email = "[email protected]"

로컬 저장소 내에서 git config --list를 실행하면 다음이 표시됩니다:

  • user.name=Project Specific User (로컬이 전역을 재정의하고, 전역이 시스템을 재정의함)
  • [email protected] (로컬이 전역을 재정의함)

로컬 저장소에 user.name이 구성되지 않은 경우 git config user.nameMy Global Name을 반환합니다.

이러한 계단식 효과는 엄청난 유연성을 제공합니다. 일반적인 기본 설정은 전역으로 설정하고, 프로젝트 수준에서 필요한 것만 재정의하여 전역 환경을 깔끔하게 유지하고 프로젝트 환경을 맞춤화할 수 있습니다.

실제 사용 사례 및 모범 사례

  • 사용자 신원: 항상 전역 user.nameuser.email을 설정하십시오. 프로젝트 요구 사항에 따라 다른 주소가 필요한 경우(예: 업무 vs 개인 계정)에만 로컬로 user.email을 재정의하십시오.
  • 별칭: 개인 생산성을 위해 일반적인 별칭(예: statusst, checkoutco, branchbr)을 전역으로 정의하십시오. 매우 프로젝트별 복잡한 명령어에 대해서만 로컬 별칭을 드물게 사용하십시오.
  • : 모든 저장소에 적용하려면 일반 유틸리티 훅(예: 간단한 서식 검사)을 전역으로 저장하십시오. 복잡한 프로젝트별 CI/CD 통합 또는 코드 스타일 적용의 경우 프로젝트 기여자가 관리하는 로컬 저장소 훅을 사용하십시오.
  • 편집기: core.editor를 전역으로 선호하는 텍스트 편집기로 설정하십시오. 이렇게 하면 Git이 모든 작업에서 커밋 메시지, 리베이스 지침 등에 선호하는 도구를 사용하도록 보장합니다.
  • 공백 및 줄 끝: core.autocrlfcore.whitespace는 일반적인 구성 항목입니다. 대부분의 경우 전역으로 설정하는 것으로 충분할 수 있지만, 특정 프로젝트에 엄격하거나 특이한 규칙(예: Linux에서 CRLF만 사용하는 오래된 프로젝트)이 있는 경우 로컬 재정의가 필요할 수 있습니다.

최종 요점

일반적인 신원 및 기본 설정에는 전역 구성을 사용하고, 프로젝트별 규칙에는 로컬 구성을 사용하며, 시스템 전체 기본값이 의도된 경우에만 시스템 구성을 사용하십시오. Git이 예상과 다르게 동작하는 경우 git config --list --show-origin이 책임이 있는 파일을 찾는 가장 빠른 방법입니다.