".gitignore을 분명히 설정했는데 왜 무시되지 않는 거지?"
이 글에서는
.gitignore가 제대로 작동하지 않게 되는 하나의 상황과
오타를 수정하는 법,
그리고 이미 올라간 파일을 Git 추적 대상에서 제거하는 방법을
직접 겪은 문제 상황과 이를 해결한 관점에서 기록해 보았다.
마지막에는 .gitignore 설정 시 확인하면 좋을 체크리스트도 작성해 보았으니 도움이 되길 바란다 :)
Jupyter Notebook으로 프로젝트를 진행하고 있던 중,
평소처럼 .gitignore 에 다음 한 줄을 추가했다.
echo .ipynb_checkopints/ >> .gitignore
의도는 Jupyter의 체크포인트 폴더인 .ipynb_checkpoints/를 GitHub에 올리지 않기 위함이었다.
그런데 git add . → git status를 해보니 계속 아래와 같은 메시지가 뜨고 있었다.
modified: data_transformation_salary/.ipynb_checkpoints/data_transformation_w.salary-checkpoint.ipynb
사실 딱히 민감한 폴더도 아니고, 큰 이슈는 아니지만 그래도 짚고 넘어가야 했다.
분명 .gitignore에 넣었는데 왜 계속 올라오지?
이유는 아주 단순했다.
echo .ipynb_checkopints/ >> .gitignore
# `heckopints 로 오타가 난 것 ..
즉, .gitignore은 전혀 엉뚱한 폴더를 무시하도록 설정된 것이었다.
.gitignore은 정확한 문자열 일치가 기본이기 때문에, 단 한 글자의 오타만 있어도 해당 파일은 무시되지 않고 그대로 추적 대상이 된다.
문제를 해결하기 위해 아래와 같은 절차를 밟았다.
① .gitignore 파일 수정
vim .gitignore
[수정 시 사용 명령어]
i입력 모드로 전환
~ 오타 수정하기 ~
ESC입력 모드 종료
:wq저장 및 종료
참고로, 슬래시 / 를 붙여야 해당 폴더 전체를 무시한다.
② 이미 추적 중인 파일 제거 (Git 캐시에서)
.gitignore를 수정하더라도, 이미 Git이 추적하던 파일은 무시되지 않는다.
따라서 캐시에서 해당 파일을 제거해 줘야 한다.
git rm -r --cached data_transformation_salary/.ipynb_checkpoints/
실제 파일은 삭제되지 않고, Git의 추적 대상에서만 제거된다.
③ 다시 Git에 반영
git add .
git commit -m "fix: correct .gitignore and remove checkpoint files from tracking"
이제 git status를 해보면 더 이상 .ipynb_checkpoints/가 보이지 않는다.
git add .를 하더라도 자동으로 무시되므로, 안심하고 푸시해도 된다.
오타 걱정 없이 .gitignore 설정이 적용되는지 확인하고 싶다면?
git check-ignore -v data_transformation_salary/.ipynb_checkpoints/dummy.ipynb
→ .gitignore에서 해당 경로가 무시되는 경우, 어떤 줄에서 무시되었는지 출력해 준다.
Git 관련해서는 정말 더블체크하는데 바보 같은 실수를 해버렸다. (학습 관련 개인 레포였고, 바로 알아채서 얼마나 다행인지)
그래도 이번 경험을 통해 알게 된 중요한 교훈이 있다면
단순한 폴더 무시 설정이라도 한 글자 오타 때문에 민감한 파일이 GitHub에 올라가는 상황이 발생할 수 있다는 것 ..
✓ .gitignore에 정확한 이름 입력했는가?
✓ 폴더 무시 시 / 슬래시 붙였는가?
✓ 이미 추적되던 파일이라면 git rm --cached로 제거했는가?