.gitignore 생성기

언어·프레임워크·OS를 골라 .gitignore 파일 생성

언어 · 런타임

프레임워크 · 툴

OS · 에디터

.gitignore 생성기 소개

.gitignore는 Git이 「아직 추적하지 않는 파일」 중 무엇을 못 본 척할지 정하는 목록입니다. 빌드 결과물, 의존성 폴더, 운영체제가 몰래 만드는 파일, 비밀 값이 든 환경 변수 파일처럼 저장소에 들어가면 안 되는 것들을 걸러 냅니다.

이 도구는 언어·프레임워크·OS·에디터별 템플릿을 골라 하나의 파일로 합칩니다. 고른 순서와 상관없이 항상 언어 → 프레임워크 → OS 순으로 정렬하고, 각 묶음 앞에 ### Node.js ### 같은 머리 주석을 붙이며, 추가 패턴 칸에 직접 입력한 패턴은 맨 끝 ### Custom ### 아래에 들어갑니다. 템플릿 내용은 대부분 GitHub의 github/gitignore 모음을 바탕으로 합니다.

패턴 규칙에서 자주 헷갈리는 네 가지

Git 공식 문서 기준으로 정리하면 다음과 같습니다.

  • 끝에 / 를 붙이면 폴더만 뜻합니다. build/는 build라는 폴더와 그 안을 무시하지만, build라는 이름의 파일은 무시하지 않습니다.
  • 앞이나 중간에 / 가 있으면 .gitignore 파일 위치 기준의 경로가 됩니다. /TODO는 최상위의 TODO만, doc/frotz는 최상위 기준 doc/frotz만 뜻합니다. / 가 없는 이름(예: *.log, node_modules/)은 어느 깊이에서든 걸립니다.
  • ** 는 여러 단계 폴더를 뜻합니다. **/logs는 어디에 있든 logs, a/**/b는 a/b, a/x/b, a/x/y/b를 모두 가리킵니다.
  • 같은 파일 안에서는 마지막으로 일치한 줄이 이깁니다. 그래서 예외(!)는 제외 규칙보다 아래에 써야 합니다.

! 예외가 먹히지 않는 경우

문서에 명시된 제약이 있습니다. 상위 폴더가 통째로 제외되면 그 안의 파일은 !로 다시 포함할 수 없습니다. Git은 성능 때문에 제외된 폴더 안을 아예 들여다보지 않기 때문입니다.

이 도구의 VS Code 템플릿이 좋은 예입니다. .vscode/ 가 아니라 .vscode/* 로 적은 다음 !.vscode/settings.json, !.vscode/extensions.json 등을 예외로 둡니다. .vscode/* 는 폴더 자체가 아니라 폴더 안의 항목을 제외하므로 Git이 폴더 안을 살펴보고 예외를 적용할 수 있습니다. 만약 .vscode/ 로 적었다면 아래의 예외 줄은 아무 효과가 없습니다. Node.js 템플릿의 .env.* 다음 !.env.example 도 같은 원리로, 비밀 값이 든 .env.local은 빠지고 예시 파일만 저장소에 남습니다.

이미 커밋한 파일은 .gitignore로 지워지지 않는다

.gitignore는 추적되지 않은 파일에만 작용합니다. 한 번이라도 커밋된 파일은 목록에 추가해도 계속 변경이 잡힙니다. 추적을 끊으려면 git rm --cached 파일명(폴더면 git rm -r --cached 폴더명)으로 인덱스에서만 지우고 커밋합니다. 작업 폴더의 실제 파일은 남습니다.

주의할 점은 비밀 값입니다. .env를 실수로 커밋했다가 이렇게 추적을 끊어도, 이전 커밋에는 내용이 그대로 남아 있고 이미 푸시했다면 다른 사람도 받아 갔을 수 있습니다. 이 경우는 키를 폐기하고 새로 발급하는 것이 먼저입니다.

템플릿을 그대로 쓰기 전에 확인할 줄

템플릿은 흔한 경우를 기준으로 넓게 잡혀 있어서 내 프로젝트의 실제 소스를 가릴 수 있습니다. 이 도구의 Python 템플릿에는 lib/, build/, dist/ 가 들어 있어, 직접 만든 lib 폴더가 있다면 새 파일이 조용히 커밋에서 빠집니다. Node.js 템플릿에는 out과 dist가 있고, JetBrains 템플릿에도 out/ 이 있습니다.

어떤 파일이 왜 무시되는지는 git check-ignore -v 경로 로 확인할 수 있습니다. 어느 .gitignore 몇 번째 줄의 어떤 패턴이 걸렸는지 알려 줍니다. 필요한 폴더가 걸렸다면 추가 패턴 칸에 !lib/ 처럼 적으면 됩니다. 추가 패턴이 파일 맨 끝에 붙으므로 앞의 템플릿 규칙을 뒤집을 수 있습니다.

에디터·OS 파일(.DS_Store, Thumbs.db, .idea/)은 저장소마다 넣기보다 개인 전역 설정(git config --global core.excludesFile)에 두는 방법도 있습니다. 다만 협업 저장소에서는 다른 사람의 설정을 기대할 수 없으니, 저장소 .gitignore에 함께 넣는 것이 무난합니다.

예시

Python + macOS + 추가 패턴

입력
Python, macOS 선택 / 추가 패턴: !lib/
결과
### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[codz] ... lib/ ... ### macOS ### .DS_Store ... ### Custom ### !lib/

Python 템플릿의 lib/ 가 먼저 나오고 맨 끝의 !lib/ 가 이를 되돌립니다. 같은 파일 안에서는 마지막 일치가 이기므로 lib 폴더가 다시 추적 대상이 됩니다.

예외가 안 먹는 쓰기

입력
logs/ !logs/keep.txt
결과
logs/keep.txt 도 무시됨

logs/ 가 폴더째 제외되어 Git이 안을 보지 않습니다. logs/* !logs/keep.txt 로 바꾸면 keep.txt만 추적됩니다.

이미 올라간 폴더 정리

입력
node_modules/ 를 커밋한 뒤 .gitignore에 추가
결과
git rm -r --cached node_modules git commit -m "stop tracking node_modules"

인덱스에서만 지우므로 로컬 node_modules는 그대로이고, 이후로는 .gitignore가 적용됩니다.

사용 방법

  1. 쓰는 언어, 프레임워크, OS와 에디터를 검색하거나 목록에서 고릅니다.
  2. 템플릿에 없는 경로나 되살릴 예외(!)가 있으면 추가 패턴 칸에 적습니다.
  3. 결과를 저장소 최상위의 .gitignore로 저장하고, git status로 빠져야 할 파일이 빠졌는지 확인합니다.

자주 묻는 질문

.gitignore에 넣었는데도 파일이 계속 보여요.

이미 커밋된 파일입니다. git rm --cached 파일명으로 추적을 끊고 커밋하세요. 파일은 로컬에 남습니다.

빈 폴더를 저장소에 남기고 싶어요.

Git은 폴더가 아니라 파일을 추적하므로 빈 폴더는 올라가지 않습니다. 관례적으로 그 폴더에 .gitkeep 같은 빈 파일을 두고, 폴더 내용을 무시할 때는 folder/* 와 !folder/.gitkeep 조합을 씁니다.

.gitignore 자체는 커밋해야 하나요?

네. 팀 모두에게 같은 규칙이 적용되어야 하므로 저장소에 포함합니다. 나만 쓰는 규칙은 .git/info/exclude에 적으면 커밋되지 않습니다.

하위 폴더에도 .gitignore를 둘 수 있나요?

가능합니다. 하위 폴더의 .gitignore 패턴은 그 폴더 기준으로 해석되고, 상위 파일과 겹치면 더 깊은 쪽이 우선합니다.

출처

기준일:

개인정보와 저장 방식