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

Section 5.14: 변경사항이 이미 추적되고 있는 (tracked) 파일의 변경 사항 ignore 처리하기

.gitignore 와 .git/info/exclude 는 오직 Git에 의해 변경 사항이 추적되지 않는 (untracked) 파일들에 대해서만 동작한다. 이미 변경사항이 추적되고 있는 (tracked) 파일에 ignore 처리 플래그를 설정하려면, update-index 명령어를 이용한다:

git update-index --skip-worktree myfile.c

원래 상태로 되돌리려면, 아래와 같이 수행한다:

git update-index --no-skip-worktree myfile.c

아래 예제를 글로벌 git config 파일에 등록해 두면 보다 손쉬운 git hide, git unhide, 그리고 git hidden 명령어를 사용할 수 있게 된다:

[alias] hide = update-index --skip-worktree unhide = update-index --no-skip-worktree hidden = "!git ls-files -v | grep ^[hsS] | cut -c 3-"

update-index 명령어는 또다른 옵션인 --assume-unchanged 도 제공한다

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

만약 위와 같이 설정한 파일에 대해 다시 변경 사항을 추적하고 싶다면, 아래와 같이 수행한다.

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

파일에 --assume-unchanged 플래그를 표기하는 것은, 사용자가 해당 파일을 변경하지 않겠다고 약속하여 Git으로 하여금 작업 디렉토리에 있는 파일이 항상 index 에 기록된 파일과 동일하다고 간주할 수 있도록 허용하는 것이다. 만약 Git 이 해당 파일을 index 에서 수정하여야 하는 경우, (예를 들어 커밋을 merge 하는 경우로 인한 상황 등) 작업이 실패할 수 있다; 그러므로, assumed-unchanged 처리한 파일이 upstream 에서 변경된 경우에는 사용자가 직접 문제 상황을 해결해야 한다. 이 옵션을 사용하는 주 목적은 파일 변경 확인 작업을 건너뛰어 성능상의 개선을 꾀하는 것이다.

반면에 --skip-worktree 플래그는 Git 으로 하여금 특정 파일이 로컬에서만 변경될 것이기 때문에 실수로라도 변경 사항이 커밋되지 않도록 하고 싶을 때에 (특정 환경을 위하여 존재하는 설정 파일 등) 해당 파일을 건드리지 않도록 유용하게 사용할 수 있다. 두 옵션이 한꺼번에 사용된 경우는, --skip-worktree 옵션이 --assume-unchanged 옵션보다 우선 순위를 가지게 된다.

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

반응형

+ Recent posts