1. 개요

Git 스테이징 영역 의 파일을 수동으로 조작하려는 경우 git update-index 를 사용 합니다. 이 명령은 자주 잘못 사용되는 두 가지 옵션  인 –assume-unchanged–skip-worktree 를 지원 합니다.

이 사용방법(예제)에서는 이 두 가지 옵션이 어떻게 다른지 살펴보고 각각에 대한 사용 사례를 제공합니다.

2. 가정-변경되지 않은 옵션은 무엇을 합니까?

–assume-unchanged 옵션은 Git 이 작업 트리에서 추적된 파일이 수정되지 않았다고 일시적으로 가정하도록 지시합니다. 따라서 변경 사항은 스테이징 영역에 반영되지 않습니다.

$ git update-index --assume-unchanged assumeunchanged.txt

git ls-files로 파일 상태를 확인할 수 있습니다 .

$ git ls-files -v
$ h assumeunchanged.txt 

여기서 h 태그는 assume-unchanged.txt가정된 변경되지 않은 옵션 으로 표시되었음을 나타냅니다 .

주로 그 목적으로 사용되지만 가정-변경되지 않은 옵션은 추적된 파일의 변경 사항을 무시하기 위한 것이 아닙니다 . 파일 그룹이 수정되었는지 여부를 확인하는 데 비용이 많이 드는 경우를 위해 설계되었습니다. 느린 파일 시스템에서 리소스 사용을 최적화하려는 경우 어떻게 됩니까? git은 대상 파일에 대한 검사를 생략하고 작업 디렉토리와 인덱스에서 버전을 비교하지 않습니다.

이 기능은 인덱스에서 대상 파일의 항목이 변경될 때마다 손실됩니다. 파일이 업스트림으로 변경될 때 발생할 수 있습니다. 이 옵션을 해제하려면 –no-assume-unchanged 를 사용할 수 있습니다 .

$ git update-index --no-assume-unchanged assumeunchanged.txt

3. skip-worktree 옵션의 기능은 무엇입니까?

–skip-worktree 옵션 은 이미 추적된 파일에서 커밋되지 않은 변경 사항을 무시합니다. 작업 트리에서 수정한 사항에 관계없이 git은 항상 스테이징 영역의 파일 내용과 속성을 사용합니다. 이것은 업스트림으로 푸시하지 않고 파일에 로컬 변경 사항을 추가하려는 경우에 유용합니다 .

$ git update-index --skip-worktree skipworktree.txt

파일 상태를 확인할 수 있습니다.

$ git ls-files -v
$ S skipworktree.txt 

여기서 Sskip-worktree.txtskip-worktree 옵션 으로 표시되었음을 나타냅니다 .

AdChoices
광고

이 옵션은 파일이 인덱스에서 변경될 때 자동으로 설정 해제됩니다. 즉, 파일이 업스트림에서 변경되어 풀링되는 경우입니다.

–no-skip-worktree 는 이 옵션을 설정 해제하는 데 사용됩니다. 잘못된 파일에 플래그가 지정되었거나 상황이 변경되어 이전에 건너뛴 파일을 더 이상 무시해서는 안 되는 경우에 유용합니다.

$ git update-index --no-skip-worktree skipworktree.txt

4. 옵션의 차이점

4.1. 분기 전환

파일에 –skip-worktree 옵션 이 설정 되어 있으면 분기를 체크아웃할 때 문제가 없습니다 . 그러나 –assume-unchanged 는 오류를 발생시킵니다.

$ git checkout  another-branch
error: Your local changes to the following files would be overwritten by checkout:
        assumeunchanged.txt
Please commit your changes or stash them before you switch branches.
Aborting

이 상황을 극복하기 위해 옵션을 설정 해제할 수 있습니다.

$ git update-index --no-assume-unchanged assumeunchanged.txt 
$ git checkout another-branch 
Switched to branch 'another-branch'

4.2. 상위

–skip-worktree 는 둘 다 설정된 경우 — 가정-변경되지 않은 비트 보다 우선 합니다. 파일에 두 옵션을 모두 설정해 보겠습니다.

AdChoices
광고
$ git update-index --assume-unchanged --skip-work-tree worktree-assumeunchanged.txt

파일의 상태는 skip-wortkree  우선 순위를 확인합니다.

$ git ls-files -v
$ S worktree-assumeunchanged.txt

5. 결론

이 기사에서는 Git의 가정-변경되지 않음건너뛰기-작업 트리 옵션 사용의 차이점에 대해 논의했습니다 . 또한 우선 순위와 로컬 및 업스트림 브랜치와 상호 작용하는 방법에 대해서도 논의했습니다.

Generic footer banner