💡 Tech Note

Global Gitignore 설정 가이드

this.Serena 2026. 4. 2. 15:58

1. Global Gitignore 개요

내 컴퓨터의 모든 Git 저장소에 공통 적용되는 무시 규칙 파일. 플러그인이나 서드파티 도구가 아닌, Git의 공식 기능. OS나 IDE가 자동 생성하는 파일을 개인 환경 수준에서 처리하기 위한 표준 방법


2. 필요성

문제 상황

프로젝트 .gitignore프로젝트 규칙(node_modules/, dist/)과 개인 환경 규칙(.DS_Store, .idea/)이 혼재하는 경우가 많음

# Node
node_modules/
dist/

# Mac
.DS_Store
._*
.Spotlight-V100

# Windows
Thumbs.db
Desktop.ini

# JetBrains
.idea/
*.iml

# VS Code
.vscode/

# Vim
*.swp
*.swo

# Emacs
*~

이로 인한 문제

문제 설명
규칙 증식 팀원마다 OS와 에디터가 달라, 새로운 규칙이 계속 추가됨
책임 불명확 프로젝트 규칙과 개인 환경 규칙이 섞여 유지보수가 어려움
PR 오염 기여자가 자기 에디터 설정을 .gitignore에 추가하는 경우 발생
반복 작업 새 프로젝트 생성 시마다 같은 OS/IDE 규칙을 매번 복사해야 함

3. Git의 세 가지 Ignore 레벨

Git은 ignore 규칙을 세 가지 레벨로 구분

┌─────────────────────────────────────────────────────────────┐
│ 레벨 1: Global gitignore (~/.gitignore_global)              │
│ → OS, 에디터가 생성하는 파일 대상                              │
│ → 내 컴퓨터의 모든 저장소에 적용                                │
│ → Git에 커밋되지 않음 (본인만 사용)                            │
├─────────────────────────────────────────────────────────────┤
│ 레벨 2: 프로젝트 .gitignore                                  │
│ → 빌드 결과물, 의존성, 시크릿 등 프로젝트 관련 파일 대상           │
│ → 해당 프로젝트에만 적용                                      │
│ → Git에 커밋됨 (팀 전체 공유)                                 │
├─────────────────────────────────────────────────────────────┤
│ 레벨 3: 로컬 exclude ($GIT_DIR/info/exclude)                │
│ → 특정 저장소에서만 무시할 개인 파일 대상                        │
│ → 해당 저장소에만 적용                                        │
│ → Git에 커밋되지 않음 (본인만 사용)                            │
└─────────────────────────────────────────────────────────────┘

배치 기준은 "파일 생성 원인"

파일 생성 원인
    │
    ├── OS (.DS_Store, Thumbs.db)
    │   └── → Global gitignore
    │
    ├── 에디터 (.idea/, .vscode/)
    │   └── → Global gitignore
    │
    └── 프로젝트 (node_modules/, build/, .env)
        └── → 프로젝트 .gitignore

4. 공식 근거

Git 공식 문서

gitignore(5) 문서에서, 모든 상황에서 무시할 패턴(에디터 백업/임시 파일 등)은 core.excludesFile로 지정된 파일에 넣도록 명시

GitHub 공식 문서

GitHub Docs에서도 항상 특정 파일을 무시하려면 글로벌 .gitignore 파일 생성을 안내

GitHub 공식 gitignore 저장소

github/gitignore 저장소에 Global/ 디렉토리가 별도 존재. macOS, Windows, Linux, JetBrains, VisualStudioCode 등 OS별, 에디터별 Global gitignore 템플릿을 공식 제공


5. 설정 방법

Step 1: 파일 생성

touch ~/.gitignore_global

파일 이름과 경로는 자유. ~/.gitignore_global이 가장 일반적

Step 2: Git에 등록

git config --global core.excludesfile ~/.gitignore_global

Step 3: 확인

git config --global core.excludesfile
# 출력: /Users/내이름/.gitignore_global

컴퓨터당 1회만 실행하면 완료


6. 권장 Global Gitignore 내용

# ================================================
# macOS
# ================================================
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes

# ================================================
# Windows
# ================================================
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/

# ================================================
# Linux
# ================================================
*~

# ================================================
# IDE / Editor
# ================================================
.idea/
.vscode/
*.iml
*.iws
*.ipr
*.sw?
*.suo
*.ntvs*
*.njsproj
*.sln
*.sublime-workspace
*.sublime-project

항목 상세

패턴 생성 주체 설명
.DS_Store macOS Finder 폴더 메타데이터 (아이콘 위치, 보기 설정)
._* macOS 리소스 포크 메타데이터
.Spotlight-V100 macOS Spotlight 검색 인덱스
.Trashes macOS 휴지통 메타데이터
Thumbs.db Windows Explorer 이미지 썸네일 캐시
Desktop.ini Windows 폴더 표시 설정
$RECYCLE.BIN/ Windows 휴지통 폴더
*~ Vim / Emacs 편집기 백업 파일
.idea/ JetBrains 계열 IDE 프로젝트 설정
.vscode/ VS Code 에디터 설정
*.iml JetBrains IntelliJ 모듈 파일
*.sw? Vim 스왑 파일 (.swp, .swo)

7. Global에 넣으면 안 되는 항목

프로젝트 도구가 생성하는 파일은 Global이 아닌 프로젝트 .gitignore에서 관리

패턴 사유
node_modules/ npm/yarn 생성 파일, 팀 전체 규칙 필요
build/, dist/ 빌드 결과물, 프로젝트마다 구조 상이
.env 프로젝트 시크릿, 프로젝트 규칙으로 관리 필요
*.tfstate Terraform 상태 파일, 인프라 프로젝트 규칙
*.log 프로젝트 로그, 프로젝트마다 정책 상이

판단 기준: "OS/에디터 때문에 생긴 파일인가, 프로젝트 때문에 생긴 파일인가."


8. 프로젝트 .gitignore 안전망

Global gitignore는 개인 설정이므로, 미설정 팀원 대비 프로젝트 .gitignore에 최소한의 안전망을 두는 것이 권장됨

# ──────────────────────────────────────────────
# Safety Net (Global gitignore 미설정 팀원 대비)
# ──────────────────────────────────────────────
.DS_Store
Thumbs.db
.idea/
.vscode/

# ──────────────────────────────────────────────
# Project
# ──────────────────────────────────────────────
node_modules/
dist/
.env

안전망에는 가장 흔한 항목만 포함. 전체 목록을 복사하면 Global gitignore의 의미가 퇴색됨


9. 이미 커밋된 파일 처리

.gitignore에 추가해도 이미 추적 중인 파일은 자동 무시되지 않음. 수동으로 추적 해제 필요

# 특정 파일 추적 해제 (로컬 파일 유지)
git rm --cached .DS_Store

# 모든 하위 디렉토리의 .DS_Store 재귀적 추적 해제
find . -name ".DS_Store" -print0 | xargs -0 git rm --cached --ignore-unmatch

# Thumbs.db 동일 처리
find . -name "Thumbs.db" -print0 | xargs -0 git rm --cached --ignore-unmatch

# .idea/ 디렉토리 전체 추적 해제
git rm --cached -r .idea/

# 변경 사항 커밋
git commit -m "chore: remove tracked OS/IDE files from git history"

옵션 설명

옵션 설명
--cached Git 인덱스(추적 목록)에서만 제거, 로컬 파일은 유지
-r 디렉토리 재귀적 제거
--ignore-unmatch 파일 미존재 시에도 에러 없이 통과 (스크립트에서 유용)

⚠️ --cached 없이 git rm 실행 시 로컬 파일까지 삭제되므로 주의


10. FAQ

Q. Global gitignore 설정 시 프로젝트 .gitignore는 무시되는가?

아님. 두 파일은 합산(union)으로 동작. 양쪽에 적힌 모든 패턴이 동시에 적용됨

Q. Global gitignore를 Git에 커밋해야 하는가?

아님. 홈 디렉토리(~/)에 위치하며, 어떤 저장소에도 속하지 않음. 개인 환경 설정이므로 커밋 대상이 아님

Q. dotfiles 저장소에 포함 가능한가?

가능하며, 오히려 권장. 여러 컴퓨터 간 동기화에 유용

Q. .vscode/를 Global에 넣으면 팀 공유 설정도 무시되는가?

팀에서 .vscode/settings.json이나 .vscode/extensions.json을 공유하는 경우, Global gitignore에서 .vscode/를 제외하고 프로젝트 .gitignore에서 세밀하게 관리

# 프로젝트 .gitignore
.vscode/*
!.vscode/settings.json
!.vscode/extensions.json