guide
왜 무시될까? git check-ignore로 디버깅하기
git check-ignore -v, git status --ignored, git ls-files로 어떤 규칙이 파일을 무시하는지 찾고, 규칙이 동작하지 않는 흔한 원인 7가지를 점검하는 방법입니다.
규칙이 많아지면 "이 파일은 왜 안 보이지?" 또는 "왜 계속 보이지?"라는 질문이 생긴다. git에는 이 질문에 답해 주는 명령이 있다.
git check-ignore -v
git check-ignore -v logs/app.log src/build/keep.txt
출력은 출처:줄번호:패턴<탭>경로 형식이다.
.gitignore:3:*.log logs/app.log
- 출처는 규칙이 들어 있는 파일이다.
.gitignore,sub/.gitignore,.git/info/exclude, 전역 파일 경로 중 하나가 나온다. - 줄번호와 패턴으로 정확히 어느 줄인지 알 수 있다.
- 아무것도 출력되지 않으면 그 경로는 무시되지 않는다.
-v를 붙이면!로 되살린 경우도.gitignore:4:!keep.log keep.log처럼 부정 규칙이 표시된다.- 상위 디렉터리가 제외된 파일은 그 디렉터리의 규칙이 표시된다. 예를 들어
logs/규칙 때문이면.gitignore:1:logs/ logs/keep.txt가 나온다.
일치하지 않은 경로까지 보려면 --non-matching(-n)을 함께 쓴다.
추적 중인 파일은 --no-index
이미 추적 중인 파일에는 무시 규칙이 적용되지 않으므로 check-ignore도 기본적으로 아무것도 출력하지 않는다. 규칙이 그 파일에 일치하는지만 알고 싶다면 --no-index를 붙인다.
$ git check-ignore -v app.log # 추적 중이라 출력 없음
$ git check-ignore -v --no-index app.log
.gitignore:3:*.log app.log
무시된 파일 목록 보기
# 상태와 함께 무시된 항목 표시 (!! 표시)
git status --ignored --short
# 무시된 파일을 파일 단위로 전부 나열
git ls-files --others --ignored --exclude-standard
# 무시 규칙에 걸리는데 추적 중인 파일
git ls-files -ci --exclude-standard
git status --ignored는 디렉터리 전체가 무시되면 !! logs/처럼 디렉터리 하나로 보여 준다. 파일 단위로 보고 싶다면 ls-files를 쓴다.
규칙이 동작하지 않는 흔한 원인
- 이미 추적 중이다. 가장 흔하다.
git ls-files <경로>에 출력이 있으면 추적 중이다.git rm --cached로 추적을 끊는다. - 상위 디렉터리가 제외됐다.
dir/를 무시한 상태에서!dir/file은 효과가 없다.dir/*로 바꾼다. - 순서가 뒤집혔다. 부정 규칙 뒤에 더 넓은 규칙이 다시 나오면 그 규칙이 이긴다.
check-ignore -v의 줄번호를 보면 바로 알 수 있다. - 후행 공백.
*.log끝의 공백은 제거되지만, 반대로 패턴 앞의 공백이나 전각 공백 같은 보이지 않는 문자는 패턴의 일부로 남는다. - 슬래시 방향. gitignore는 Windows에서도
/만 경로 구분자로 쓴다.build\output은 역슬래시가 이스케이프로 해석되어 의도대로 동작하지 않는다. - 앵커링 착각.
config/local.json은 중간 슬래시 때문에 루트의config에만 일치한다. 모든 깊이에 적용하려면**/config/local.json을 쓴다. - 대소문자.
core.ignorecase가false인 환경(보통 Linux)에서는*.JPG와*.jpg가 다르다. macOS·Windows에서 만든 저장소는 대개true라 로컬에서는 되고 CI에서는 안 되는 차이가 생길 수 있다.
브라우저에서 미리 확인하기
저장소에 적용하기 전에 규칙을 바꿔 보며 결과를 비교하고 싶다면 이 사이트의 패턴 테스트 탭이 편하다. 규칙과 경로 목록을 붙여 넣으면 경로마다 결과와 결정한 규칙(줄 번호), 상위 디렉터리 때문에 무시된 경우를 표시한다. 경로 목록은 git ls-files나 find . -type f 출력을 그대로 쓰면 된다. 다만 하위 디렉터리의 .gitignore나 전역 설정까지 합친 최종 판정은 저장소에서 git check-ignore -v로 확인한다.
참고
- git-check-ignore 공식 문서
- git-status 공식 문서: --ignored
- git-ls-files 공식 문서
- 확인 기준일: 2026-09-23 (git 2.50.1로 출력 형식 검증)