.gitignore
에 .env라고 한 줄만 적었을 경우, git 2.47.3 버전에서 더미 값 파일 10개를 배치하여 테스트했습니다. 이때 .env.local, .env.bak, .env~, prod.env 등은 무시되지 않았습니다.
파일 경로 앞에 슬래시(/)를 붙여서 (/.env) 지정할 경우 (공식 문서에 명시된 '앞이나 중간에 /가 있으면, 해당 .gitignore의 디렉토리부터 상대 경로로 간주한다'는 규칙에 따라), backend/.env와 같은 서브 폴더의 .env 파일도 무시되지 않게 됩니다. 이번 테스트에서 10개 파일을 모두 제거하고 .env.example만 남길 수 있었던 것은 다음 3줄 덕분이었습니다.
.env*
*.env
!.env.example
무시되지 않은 env 관련 파일들은 다음 한 줄로 목록화할 수 있습니다.
git ls-files --others --exclude-standard | grep -i env
파일 이름만으로 .env나 키의 위치를 점검하는 CLI도 제작했습니다 (이번 확인에서는 .env.bak은 표시되었으나, .env~와 prod.env는 표시되지 않았습니다. 대응 방안은 Issue에 남겨두었습니다).
npx github:supportapp3-lab/ai-secret-check scan
사용하기 위해 일회성 리포지토리에 다음 10개 파일 (내용물은 모두 API_KEY=dummy-not-real)을 배치했습니다 (Debian의 box, git 2.47.3).
.env .env.local .env.bak .env~ .env.old env.bak .env.example
backend/.env backend/.env.production config/prod.env
.gitignore를 패턴별로 하나씩 수정하며 git status --short --untracked-files=all 명령어로 '무시되지 않고 남아있는 파일' (?? 라인)을 확인했습니다.
?? .env.bak
?? .env.example
?? .env.local
...
이 경우 .env와 backend/.env만 무시되었습니다. .env라는 패턴은 이름이 정확히 .env인 파일에만 적용되기 때문에, .env.local이나 백업용 .env.bak, .env~도 AI 에이전트에게 git add -A를 맡기면 그대로 추가됩니다.
?? .env.bak
?? .env.example
?? .env.local
...
backend/.env까지 남아있었던 이유는 공식 gitignore 문서에 '패턴의 시작이나 중간에 구분자(separator)가 있으면, 해당 패턴은 특정 .gitignore 파일 자체의 디렉토리 레벨을 기준으로 상대 경로로 간주한다'고 명시되어 있고, 맨 앞의 / 때문에 최상위 계층으로만 한정되었기 때문입니다. 모노레포나 backend/, frontend/ 등으로 분리된 구성에서는 주의가 필요합니다.
?? config/prod.env
?? env.bak
.env로 시작하는 이름은 모두 무시되었습니다. 다만 .env.example도 무시되기 때문에, 예제 파일을 커밋하고 싶다면 !.env.example를 추가해야 합니다.
?? .env
?? .env~
?? backend/.env
...
이 경우 파일명 뒤에 무언가 붙은 것만 일치하기 때문에, .env 본체와 .env~가 남아있었습니다.
.env.*만 작성할 경우에는 .env 라인도 필요합니다.
?? .env.bak
?? .env.example
?? .env.local
...
prod.env는 무시되었지만, .env.local 등은 남아있었습니다.
$ cat .gitignore
.env*
*.env
...
env.bak (맨 앞에 '.')
패턴에 해당하지 않았습니다. 이름 짓는 방식이 제각각이라면, 패턴을 늘리는 것보다 나중에 소개할 전체 목록 확인(洗い出し) 한 줄로 보는 것이 더 확실합니다.
은 어떤 규칙에 걸렸는지 표시해 줍니다. !로 시작하는 라인에 해당하면 '무시되지 않음'을 의미합니다 (git-check-ignore의 -v 옵션).
.gitignore를 .env 한 줄로 되돌린 상태에서 실행했습니다.
$ git ls-files --others --exclude-standard | grep -iE 'env'
.env.bak
.env.example
...
--others는 추적하지 않는 파일(untracked file)을, --exclude-standard는 .gitignore와 같은 무시 규칙을 적용하는 지정자입니다 (git ls-files). 여기에 나온 파일들은 다음 git add -A로 추가됩니다. environment.ts처럼 이름에 env를 포함하기만 한 파일도 나오므로, 눈으로 확인하여 판단해야 합니다.
이미 추적되고 있는 .env에 대해서는 .gitignore가 적용되지 않는 점은 이전 기사에서 확인했습니다.
.gitignore | 무시되지 않은 것 (이번 10개 중) | |
|---|
.env | .env.local ・.env.bak ・.env~ ・prod.env 등 8개 | /.env |
.env* | prod.env ・env.bak (.env.example도 무시됨) | .env.* |
*.env | .env.local ・.env.bak 등 7개 | .env* + *.env + !.env.example |
- gitignore (PATTERN FORMAT)
- git-check-ignore (-v)
- git-ls-files (--others / --exclude-standard)
- 관련 필자의 기사: .gitignore에 .env를 적어도, 추적 중인 .env는 계속 커밋됩니다.
※ 사양은 2026-11-01 시점의 공식 문서를 기반으로 합니다. 동작은 git 2.47.3의 임시 리포지토리에서 더미 값만을 사용하여 테스트했습니다.
업데이트 정보나 간단한 Tips는 X(@supportapp3_lab)에서 발신하고 있습니다.