📦 .gitignore / .dockerignore 생성기
언어 (Node / Python / Go / Rust / Java / PHP / Ruby) / 프레임워크 (React / Next.js / Django / Rails / Laravel) / IDE (VSCode / JetBrains / Vim) / OS (macOS / Windows / Linux) 프리셋을 결합하여 .gitignore 또는 .dockerignore 를 즉시 생성. 중복 제거 · 주석 유지 · 실시간 미리보기 · 복사 / 다운로드.
📝 .gitignore (미리보기)
# 프리셋을 1개 이상 선택하세요
📖 자주 걸리는 지점
언어·프레임워크·IDE·OS 의 프리셋을 겹쳐 .gitignore 또는 .dockerignore 를 생성합니다. 중복 행은 빼고 주석은 남깁니다. 처리는 브라우저 안에서 끝납니다. 다만 .gitignore 는 「앞으로 추가될 파일」에만 듣습니다 — 이미 Git 이 추적하고 있는 파일은 무엇을 써도 무시되지 않습니다. 그리고 가장 흔한 오해가 여기에 있습니다: .env 를 커밋한 뒤 .gitignore 에 더해도 리포지터리에서도 이력에서도 사라지지 않습니다. 무시하는 것과 없었던 일로 하는 것은 다릅니다.
| 사례 | 무슨 일이 일어나는가 | 어떻게 하면 되는가 |
|---|---|---|
| 이미 추적 중인 파일에는 듣지 않는다 | Git 은 추적 대상이 된 시점에 .gitignore 를 참조하지 않게 됩니다. 따라서 한 번 커밋한 .env·node_modules·빌드 산출물은 나중에 규칙을 더해도 차분에 계속 나옵니다. 그리고 진짜 문제는 눈앞의 작업 디렉터리가 아니라 이력입니다 — git rm --cached 로 추적을 빼도 과거 커밋의 내용은 사라지지 않습니다. git log -p 를 치면 누구나 읽을 수 있고, 이미 push 했다면 fork·미러·CI 의 캐시·각종 클론에도 같은 것이 남아 있습니다. 공개 리포지터리라면 기계적으로 키를 수집하는 스캐너가 몇 분 만에 찾아냅니다 — 실제로 공개 직후 유출된 키가 악용되기까지의 시간은 분 단위로 관측되고 있습니다. |
먼저 추적을 뺍니다: git rm --cached .env 를 실행하고 .gitignore 추가와 함께 커밋하세요 (--cached 를 붙이지 않으면 파일 자체가 사라집니다). 디렉터리라면 -r 을 더합니다. 그리고 기밀이 포함되어 있었다면 대처는 단 하나입니다: 그 키를 로테이션하세요. 이력의 재작성 (git filter-repo) 은 가능하지만 그것을 유일한 대책으로 삼지 마세요 — 전원이 clone 을 다시 만들어야 하고, 게다가 남의 fork 나 이미 push 된 오브젝트에는 손이 닿지 않습니다. 예방이 압도적으로 저렴합니다: git add 전에 git status 를 읽는 습관과 gitleaks 나 git-secrets 를 pre-commit 훅에 넣는 것입니다. |
.gitignore 를 그대로 .dockerignore 로 삼는다 |
이 둘은 형식이 같고 목적이 다릅니다. .gitignore 는 버전 관리에서 빼는 것을 쓰고 .dockerignore 는 빌드 컨텍스트에 보내지 않을 것을 씁니다. 그대로 돌려쓰면 두 방향으로 망가집니다. 빌드에 필요한 것을 제외해 버립니다 — dist/ 는 .gitignore 에서는 올바른 제외지만 사전 빌드한 산출물을 COPY 하는 Dockerfile 에서는 필수 디렉터리입니다. 반대로 제외해야 할 것이 남습니다 — .git/ 과 node_modules/ 를 제외하지 않으면 컨텍스트가 수백 MB 가 되어 빌드가 눈에 띄게 느려집니다. 게다가 호스트에서 설치한 node_modules 가 이미지에 들어가면 플랫폼이 다른 네이티브 모듈이 섞여 실행 시에 죽습니다. |
둘을 따로 쓰세요. .dockerignore 는 「이미지 빌드에 필요한 것만 통과시킨다」는 발상으로 만들면 빗나가지 않습니다 — 최소한 .git·node_modules·.env·*.log·테스트·문서·CI 설정을 떨어뜨립니다. .env 는 반드시 넣으세요 — 컨텍스트에 들어가면 COPY . . 로 이미지에 구워지고 이미지를 배포한 상대 전원이 읽을 수 있습니다. 효과 확인은 간단해서 docker build 처음에 나오는 컨텍스트 전송량을 봅니다 — 수 MB 이하로 들어가면 적절합니다. 그리고 .dockerignore 는 빌드 컨텍스트의 기점에만 놓을 수 있습니다 — 서브디렉터리에 두어도 읽히지 않습니다. |
| 패턴이 생각한 곳에 걸리지 않는다 | 쓰는 방식의 세부에 따라 의미가 달라집니다. 슬래시를 포함하지 않는 build 는 어느 계층에 있는 build 에도 걸립니다. 앞에 슬래시를 붙인 /build 는 루트 바로 아래만, 끝에 슬래시를 붙인 build/ 는 디렉터리만입니다. 가장 알기 어려운 것이 제외의 취소 (!) 로, 부모 디렉터리를 제외하고 있으면 그 안의 파일을 ! 로 되돌릴 수 없습니다 — Git 은 제외된 디렉터리의 내용을 훑지 않으므로 거기에 쓴 규칙은 읽히지도 않습니다. node_modules/ 와 !node_modules/mylib 를 나란히 써도 후자는 아무 일도 일으키지 않습니다. 오류도 경고도 나오지 않으므로 「썼는데 안 듣는다」는 형태로만 나타납니다. |
망설여지면 git check-ignore -v <경로> 를 실행하세요. 어느 파일의 몇 번째 줄 규칙이 걸렸는지를 한 줄로 표시합니다 — 이 명령을 아느냐 모르느냐로 조사 시간이 자릿수 단위로 달라집니다. 아무것도 출력되지 않으면 그 경로는 무시되고 있지 않습니다. 디렉터리 안의 하나만 되돌리고 싶을 때는 디렉터리째가 아니라 내용을 제외하세요: node_modules/* 라고 쓴 뒤 !node_modules/mylib 를 나란히 쓰면 의도대로 동작합니다. 프리셋을 겹치면 행 수가 늘지만 양 자체는 문제가 되지 않습니다 — 문제가 되는 것은 「왜 이 행이 있는지 모르겠다」는 상태이므로 프로젝트 고유의 행은 주석을 달아 끝에 모아 두세요. |
무시 설정은 한 곳이 아닙니다. Git 은 리포지터리의 .gitignore·서브디렉터리의 .gitignore·.git/info/exclude·글로벌 설정 (core.excludesFile) 을 순서대로 봅니다. 여기서의 구분에는 명확한 기준이 있습니다: 그 프로젝트의 누구에게나 불필요한 것 (빌드 산출물·의존 디렉터리) 은 리포지터리의 .gitignore 로, 당신 환경만의 사정 (에디터 설정·OS 가 만드는 파일·개인적인 메모) 은 글로벌 설정으로 넣으세요. .DS_Store 나 Thumbs.db 나 .idea/ 를 리포지터리의 .gitignore 에 쓰는 것은 엄밀히는 남에게 자기 환경을 강요하는 셈입니다 — 다만 현실에서는 모두가 하고 있으므로 팀에서 맞추는 편이 마찰이 적은 것도 사실입니다. 마지막으로 빈 디렉터리는 Git 이 추적하지 않습니다 — logs/ 같은 빈 디렉터리를 남기고 싶다면 logs/.gitkeep 이라는 빈 파일을 두세요 (.gitkeep 은 Git 의 기능이 아니라 그저 관습적인 파일 이름입니다).
📖 사용법
-
1
모드 선택.gitignore 또는 .dockerignore 모드 선택. .dockerignore 는 이미지 비대화 방지 패턴 (node_modules / .git / *.log) 포함.
-
2
스택 선택언어 / 프레임워크 / IDE / OS 칩 선택. 다중 선택 시 자동 병합 + 중복 제거.
-
3
복사 또는 다운로드복사 또는 .gitignore/.dockerignore 파일명으로 다운로드 가능.
❓ 자주 묻는 질문
.gitignore 와 .dockerignore 차이?
기존 파일에 추가 가능?
github/gitignore 와 차이는?
프리셋 추가 요청
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.