gitignore가 작동하지 않을 때 Git 캐시 삭제로 해결하는 방법

.gitignore 파일을 프로젝트에 추가했는데도 특정 파일들이 계속 커밋에 포함되는 경우가 있습니다. 이는 해당 파일이 이미 Git의 추적(tracking) 대상으로 등록되어 있기 때문입니다. .gitignore는 아직 추적되지 않은 파일에만 적용되므로, 이미 인덱스에 등록된 파일은 수동으로 제거해야 합니다. 이 글에서는 Git 캐시 삭제를 통한 정확한 해결 방법과 검증 명령어를 제시합니다.


gitignore가 작동하지 않을 때 Git 캐시 삭제로 해결하는 방법



1. .gitignore가 작동하지 않는 근본 원인

.gitignore 파일은 아직 Git이 추적하지 않는 파일에 대해서만 효력을 발휘합니다. 다음과 같은 상황에서 문제가 발생합니다:

  • 설정 파일(config.json, .env 등)을 이미 커밋한 후 .gitignore에 추가한 경우
  • 민감한 정보가 담긴 파일이 원격 저장소에 업로드된 상태에서 .gitignore 규칙을 적용한 경우
  • Eclipse, IntelliJ 등 IDE에서 자동 생성된 파일들이 먼저 커밋된 경우

Git은 한 번 인덱스에 등록된 파일을 계속 추적하기 때문에, .gitignore에 패턴을 추가하는 것만으로는 기존 추적을 해제할 수 없습니다. 이를 해결하려면 Git의 인덱스(캐시)에서 해당 파일을 명시적으로 제거해야 합니다.

2. .gitignore 적용 상태 확인 방법

캐시를 삭제하기 전에, 현재 어떤 파일이 무시되고 있는지 정확히 확인하는 것이 중요합니다. 다음 명령어들을 활용하십시오:

무시되는 파일 전체 목록 확인

git status --ignored

출력 예시:

Ignored files:
  (use "git add -f ..." to include in what will be committed)
    config/api.env
    config/clickhouse_connection.cfg
    config/for_web/
    node_modules/

특정 파일이 어떤 .gitignore 패턴에 매칭되는지 확인

git check-ignore -v config/api.env

출력 예시:

.gitignore:101:config/    config/api.env

이 명령은 .gitignore 파일의 몇 번째 라인에 있는 어떤 패턴이 적용되었는지까지 보여주므로, 디버깅 시 매우 유용합니다.

부정 패턴(!) 확인

git check-ignore -v test/db.config

출력 예시:

test/.gitignore:4:!.config    test/db.config

.gitignore에서 느낌표(!)는 예외 규칙으로, 무시 대상에서 다시 포함시킵니다. 의도하지 않은 파일이 추적되는 경우 이 패턴을 확인하십시오.

3. Git 캐시 삭제로 .gitignore 강제 적용하기

이미 추적 중인 파일을 .gitignore에 추가했다면, 다음 절차로 인덱스에서 제거해야 합니다:

특정 파일만 추적 해제

git rm --cached test.cfg
git commit -m "Remove test.cfg from tracking"
git push origin master

--cached 옵션은 작업 디렉토리의 실제 파일은 유지하면서 Git 인덱스에서만 제거합니다. 이 옵션이 없으면 파일 자체가 삭제되므로 주의하십시오.

전체 캐시 초기화 후 재등록 (권장)

git rm -r --cached .
git add .
git commit -m "Apply .gitignore to all tracked files"
git push origin master

이 방법은 다음과 같은 순서로 동작합니다:

  1. git rm -r --cached . - 모든 파일을 인덱스에서 제거 (실제 파일은 유지)
  2. git add . - .gitignore 규칙을 적용하여 파일을 다시 스테이징
  3. git commit - 변경사항을 커밋 (이제 .gitignore 규칙이 반영됨)
  4. git push - 원격 저장소에 반영

이 과정에서 .gitignore에 등록된 파일은 자동으로 제외되며, 추적이 필요한 파일만 다시 인덱스에 등록됩니다.

4. 실전 팁과 주의사항

  • 민감 정보가 이미 푸시된 경우: 캐시 삭제만으로는 Git 히스토리에서 제거되지 않습니다. git filter-branch 또는 BFG Repo-Cleaner를 사용해 히스토리를 재작성해야 합니다.
  • 팀 프로젝트에서 주의: 전체 캐시 초기화는 대량의 파일 변경을 발생시킵니다. 사전에 팀원들과 공유하고 작업하십시오.
  • .gitignore 패턴 테스트: 복잡한 패턴은 git check-ignore -v로 반드시 검증하십시오. 특히 *, **, ! 조합은 예상과 다르게 동작할 수 있습니다.
  • IDE 설정 파일: .idea/, .vscode/, .settings/ 등은 프로젝트 초기에 .gitignore에 추가하는 것을 권장합니다.

결론

.gitignore가 작동하지 않는 문제는 파일이 이미 Git의 추적 대상으로 등록되어 있기 때문입니다. git rm --cached 명령으로 인덱스에서 파일을 제거한 후 다시 커밋하면 .gitignore 규칙이 정상적으로 적용됩니다. 문제가 발생하면 git check-ignore -v로 패턴 매칭 상태를 먼저 확인하십시오.

Action Item: 지금 당장 프로젝트 루트에서 git status --ignored를 실행하여 의도하지 않게 추적되고 있는 파일이 없는지 점검하십시오.


#함께 읽으면 좋은 글

Git refusing to merge unrelated histories 에러 해결 완벽 가이드 : 바로보기

댓글