.gitignore
에 .env를 작성하더라도, 이미 Git이 추적하고 있는 파일은 예외입니다. 공식 문서에도 "Files already tracked by Git are not affected"라고 명시되어 있습니다. 따라서 .env에는 적용되지 않습니다 - git 2.47.3으로 테스트했을 때, 나중에
.gitignore
에 .env를 추가해도 git status에는 M .env로 계속 표시되었고, git add -A → git commit을 하면 새로운 값(더미)이 그대로 커밋되었습니다. AI 에이전트에게 "모두 add하고 커밋"을 맡기면 이 상태 그대로 들어가게 됩니다.
- 추적 중이지만 무시 목록에 포함된 파일은 다음 한 줄로 목록화할 수 있습니다.
git ls-files -ci --exclude-standard
- 추적을 해제하는 명령어는
git rm --cached .env입니다. (로컬 파일은 삭제되지 않습니다). 다만 과거 커밋에는 값이 그대로 남아있습니다.
파일 이름만으로 .env나 키의 위치를 점검하는 CLI도 만들었습니다(추적 상태 판별은 하지 않습니다).
npx github:supportapp3-lab/ai-secret-check scan
일회용 디렉토리에서 더미 값만 사용하여 테스트했습니다 (Debian의 box, git 2.47.3). 절차는 다음과 같습니다.
.env
( API_KEY=dummy-not-real-1 )
을 포함하여 첫 번째 커밋을 합니다 - 나중에
.gitignore
에 .env를 작성하고 커밋합니다 -
.env
의 값을 dummy-not-real-2로 변경합니다
이 상태에서의 출력입니다.
$ git status --short
M .env
$ git check-ignore -v .env
...
.gitignore
를 작성했음에도 불구하고, .env는 "변경됨"으로 계속 표시되었습니다. -
git check-ignore -v .env
은 아무것도 출력하지 않고 종료 코드 1을 반환했습니다. 공식 문서대로, 추적 중인 파일은 무시 규칙의 대상이 아니기 때문에 기본적으로 표시되지 않습니다. --no-index를 붙이면 .gitignore:1:.env에 해당한다는 것을 알 수 있습니다. -
git add -A로 .env가 스테이징되고 커밋에 새로운 값이 들어갔습니다.
$ git ls-files -ci --exclude-standard
.env
-c는 추적 중(캐시된) 파일을, -i는 무시 규칙에 해당하는 파일만 표시하며, --exclude-standard는 .gitignore 등의 표준 무시 규칙을 사용하라는 지정입니다 (git-ls-files).
- 아무것도 출력되지 않으면, 무시했다고 생각하지만 실제로는 추적되고 있는 파일은 없습니다. AI 에이전트에게 커밋을 맡기기 전이나,
.gitignore
를 나중에 정리했을 때 한 번 실행해 두면 안심할 수 있습니다.
$ git rm --cached .env
rm '.env'
$ git commit -m untrack
...
git rm --cached는 인덱스에서만 제외시키고, 로컬 .env 파일은 그대로 남겨둡니다 (gitignore의 참고 사항).
- 제외시킨 후에는
.env를 수정하고 git add -A를 해도 스테이징되지 않았습니다. -
팀원과 공유하는 리포지토리에서는, 제외 커밋을 pull한 상대방의 로컬 환경에서
.env
가 사라질 수 있습니다 (추측: Git이 추적 대상에서 삭제된 파일로 처리하기 때문. 본 기사에서는 확인하지 않았습니다). 미리 알려주는 것이 안전합니다.
$ git log --oneline -- .env
5c709ed untrack
fb93554 AI commit
...
git rm --cached는 향후 커밋에서 제외시킬 뿐, 히스토리의 값은 사라지지 않습니다. 만약 실제 키가 커밋되었다면, 먼저 키를 무효화하고 재발급받는 것이 우선입니다. 히스토리에서 지우는 방법은 과거에 커밋했던 .env 파일을 git의 히스토리에서 읽을 수 있는 곳에 모아두었습니다.
명령어 및 옵션 요약
| 목표 | 명령어 |
|---|
| 추적 중인데 무시 규칙에 해당하는 파일 찾기 | git ls-files -ci --exclude-standard |
| ... | |
- .gitignore (Files already tracked by Git are not affected / NOTES)
- git-check-ignore (tracked files are not shown / --no-index)
- git-ls-files (-c / -i / --exclude-standard)
- 관련 기사: AI에게 커밋을 맡기기 전에: .env와 키를 pre-commit으로 막기
※ 사양은 2026-10-31 시점의 공식 문서를 기반으로 합니다. 동작은 git 2.47.3의 일회성 리포지토리에서 더미 값만을 사용하여 테스트했습니다.
업데이트 정보나 간단한 Tips는 X (@supportapp3_lab)에서 발신하고 있습니다.