좋은 질문이에요 👍
.gitkeep은 “빈 디렉토리를 Git에 포함시키기 위한 관습적인 더미 파일”입니다.
Git은 기본적으로 빈 디렉토리를 추적하지 않습니다.
즉, 디렉토리 안에 아무 파일도 없으면 그 폴더는 커밋되지 않습니다.
예를 들어,
project/
└── secrets/
이렇게 secrets/ 폴더만 만들어두고 내부에 아무 파일이 없으면
Git은 이 폴더 자체를 버전 관리하지 않습니다.
.gitkeep의 역할그래서 우리는 보통 아래처럼 합니다 👇
touch secrets/.gitkeep
이렇게 하면 Git이 secrets/ 폴더를 인식하게 됩니다.
그리고 .gitignore에는 아래처럼 설정하죠:
secrets/*
!secrets/.gitkeep
이 뜻은:
secrets/ 폴더의 모든 파일은 무시(*)하되.gitkeep 파일은 예외(!) 로 추적하겠다는 뜻입니다.Git에는 폴더 구조는 유지되지만, 비밀번호 같은 파일은 절대 올라가지 않게 됩니다.
secrets/
├── .gitkeep ✅ Git에 포함됨
├── db_password.txt 🚫 Git에 포함 안 됨
└── minio_pass.txt 🚫 Git에 포함 안 됨
tmp/logs/uploads/secrets/같은 폴더를 .gitkeep으로 유지합니다.
즉, 구조는 유지하면서 민감 데이터나 빌드 결과물은 제외하는 거죠.
원하신다면 mediaforge 프로젝트 기준으로
.gitignore + .gitkeep 권장 구성 예시도 같이 정리해드릴까요?