GitNotes.5-5.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 5.5: Git 저장소에 이미 커밋 되어있는 파일을 ignore 처리하기

만약 이미 Git 저장소에 추가되어 있는 파일을 더 이상 변경 추적 (track) 하지 않고 싶다면, (앞으로 생성할 커밋들에 해당 파일이 포함되지 않기를 바란다면), 해당 파일을 index 에서 제거할 수 있다:

git rm --cached <file>

역주: 이 방법은 다른 저장소에서 실제 파일 삭제를 유발할 수 있습니다. 실제 적용 전에 하단 설명을 먼저 꼭 읽으세요.

위 명령어는 해당 파일을 저장소에서 제거하여 이후로 해당 파일을 수정하더라도 수정 내역이 Git이 추적하지 않도록 할 것이다. --cached 옵션을 사용함으로서 해당 파일이 실제 사용자의 디스크에서 삭제되지는 않는 것을 보장할 수 있다. 더불어, 기존에 해당 파일에 작업했던 내용 역시 여전히 Git 히스토리상에서 확인할 수 있다.

유의할 점은, Git 의 index 에서 파일을 제거한 후 다른 누군가가 사용자의 저장소에서 pull 을 수행한다면, 해당 명령을 수행한 사용자의 디스크에서는 파일이 실제 삭제될 것이라는 점이다.

위와 같은 방법 대신에, Git 으로 하여금 작업 디렉토리 내의 특정 파일에 대해 index 버전의 파일을 읽음으로써 항상 수정되지 않은 최신 상태라고 가장하도록 하는 (따라서 새로운 수정 사항이 있을지라도 무시하게 되는) "skip worktree" 비트를 아래와 같이 설정할 수 있다:

git update-index --skip-worktree <file>

파일 쓰기 수행은 이 비트에 영향을 받지 않으며, 내용물 보존은 여전히 첫번째 중요 사항이다. 사용자가 해당 파일에 수행한 작업들은 Git 관리에서는 ignore 처리될지라도 변경 내역이 유실되는 경우는 없다. 한가지 단점은, stash 처리와 충돌이 난다는 것이다. (해당 파일을 변경하고 stash 하려고 해도 변경 사항이 없다고 나오기에 stash 처리가 되지 않는다): 이 비트를 다시 해제하려면, 아래와 같이 수행한다

git update-index --no-skip-worktree <file>

때로는 Git 으로 하여금 파일 변경 여부를 검사조차 하지 않은 채로 파일이 변경되지 않았다고 생각하게 만드는 방식이 필요할 때도 있다. 이 방식은 특정 파일을 index 에서 제거할 필요 없이, 해당 파일에 대해 이후로 생길 어떠한 변경사항도 Git 이 ignore 처리하게 설정할 수 있다:

git update-index --assume-unchanged <file>

위 명령어 수행시 파일에 생기는 어떠한 변경 사항도 Git 이 ignore 처리하도록 강제한다. (그러나 해당 파일에 대한 외부 변경 사항을 pull 하거나 파일 자체를 stash 할 경우, 파일에 적용된 모든 변경 사항은 유실됨을 유의하라) Git 으로 하여금 해당 파일을 다시 "관리" 하게 하고싶다면, 아래 명령어를 수행한다:

git update-index --no-assume-unchanged <file>

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts