보통 git에서는 .gitignore을 사용해서 특정 파일을 git이 관리하지 않게 만듭니다. 그런데 실무를 하다 보면 이미 commit한 파일이지만, 이번 커밋 한 번은 수정 사항이 반영되지 않게 하고 싶은 경우가 생깁니다. 설정 파일같은 것을 예로 들 수 있겠습니다.
- 공통 설정 파일이 있는데, 이것을 팀원별로 수정해서 사용하는 걸 상상해봅시다. A라는 사람이 설정파일을 자기의 키값으로 수정했는데 실수로 그 파일을 커밋+푸쉬해버리면 다른 팀원들과 충돌이 나게 됩니다. 다른 팀원들이나 마스터가 그 파일을 다시 원래대로 되돌리는 커밋을 한 번 더 날려야되는 상황이 나오죠.
- robots.txt가 브랜치별로 다른 경우도 있을 수 있습니다. main 브랜치에서는 Allow: / 인데 beta 브랜치에서는 Disallow: /인 경우 각각의 브랜치에서 커밋해버리면 서로 머지할 때 문제가 됩니다. 이럴 때는 beta 브랜치에서 Disallow: / 해둔 것을 무시해야 합니다. 다만 git status에서 modified로 잡혀서도 안 됩니다.
이럴 때는 팀원들에게 그 설정 파일에 대해서는 커밋을 하지 않게 만들도록 지시할 필요가 있습니다. 여기서 쓰는 게 --assume-unchanged입니다.
git update-index --assume-unchanged 파일경로
이렇게 하면 해당 파일은 변경 사항이 생겨도 git이 추적하지 않습니다. 이번 커밋에서만 무시하는 게 아니라 계속 추적하지 않으므로 다시 추적하게 하는 명령어가 필요합니다.
git update-index --no-assume-unchanged 파일경로
해도 되고 파일이 여러 개라면 다음과 같이 한 번에 할 수도 있습니다.
git update-index --really-refresh
변경 안되는 부분만 한 파일로 모아놓고 불러오는게 좋겠네요