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
'💡 Tech Note' 카테고리의 다른 글
| 🌐HTTP Status Code Deep Dive (0) | 2026.03.23 |
|---|---|
| 소프트웨어 개발 보안 핵심 가이드 (0) | 2026.02.27 |
| [서버 보안] API 키 관리 전략 및 환경변수 설정 (0) | 2026.02.27 |
| [Git] 실무 핵심 명령어 요약 및 자동 업로드 스크립트(.sh) 공유 (0) | 2026.02.19 |
| [DB/SQL] 자주 쓰는 SQL 명령어 (0) | 2026.02.19 |