첫 커밋을 생성하고 나면 나중에 버전관리에서 제외시키고 싶은 파일을 .gitignore에 추가해도 계속 변경상태가 git status에 나타난다.
이런 상황을 몇 번 겪어서 어떻게 해야하는지 대략적으로는 알고 있지만, 자주 쓸 일이 없다보니 매번 다시 검색하고, 이게 그 때 썼던 방법이 맞는지 확인하는 작업이 귀찮아서 확실히 기록을 남기고자 포스트를 작성했다.
$ git rm -r --cached .
$ git add .
$ git commit -m ".gitignore 수정"
git rm 명령은 파일을 삭제하고, 그 삭제된 상태를 스테이징한다[1].
워킹 카피는 그대로 두고 git이 더이상 추적하지 않도록만 하려면(인덱스 영역에서만 삭제하려면) --cache 옵션을 사용하면 된다.
-r 옵션은 다른 명령어들과 마찬가지로 recursive를 의미한다.
즉, git rm -r --cached .
은 현재 디렉토리와 하위 모든 파일을 워킹 카피는 그대로 둔 채 인덱스 영역에서만 삭제하라는 의미이다.
이 명령을 실행하고 나면 모든 파일이 deleted 상태로 바뀐다. 그러나 ls 명령으로 확인해보면 실제로 파일이 삭제되진 않은 상태이니 놀랄 필요 없다.
이어서 git add .
을 실행하면 .gitignore에서 제외시킨 파일만 deleted 상태임을 알 수 있다.
이제 git commit
을 해주면 파일이 삭제되었다는 정보가 커밋된다.
주의점: 다른 사람이 git pull
등으로 이 커밋을 받으면 그 사람 컴퓨터에서는 워킹 카피가 삭제된다. 로컬에서 다시 생성하기 어려운 파일이라면 미리 알린 다음에 적용해야한다.