개발관련/Git

Git - 'assume-unchanged'과 'skip-worktree'의 차이점

Rateye 2021. 11. 5. 10:51
728x90
반응형
질문 : 힘내- '변경되지 않은 것으로 가정'과 '작업 트리 건너 뛰기'의 차이점

내 저장소에 커밋하지 않으려는 파일에 대한 로컬 변경 사항이 있습니다. 서버에서 애플리케이션을 빌드하기위한 구성 파일이지만 다른 설정으로 로컬에서 빌드하고 싶습니다. 당연히 파일은 항상 'git status'를 준비 할 때 표시됩니다. 이 특정 변경 사항을 숨기고 커밋하지 않고 싶습니다. 다른 파일 변경은하지 않겠습니다.

몇 가지 파헤쳐 본 후, '변경되지 않은 것으로 가정'과 '작업 트리 건너 뛰기'의 두 가지 옵션이 표시됩니다. 여기 의 이전 질문은 그들에 대해 이야기하지만 그 차이점을 실제로 설명하지는 않습니다. 내 질문은 이것이다 : 두 명령이 어떻게 다른가요? 누군가가 둘 중 하나를 사용하는 이유는 무엇입니까?

답변

skip-worktree 원합니다.

assume-unchanged 는 파일 그룹이 수정되었는지 확인하는 데 비용이 많이 드는 경우를 위해 설계되었습니다. 비트를 설정할 때 git (물론) 인덱스의 해당 부분에 해당하는 파일이 작업 복사본에서 수정되지 않았다고 가정합니다. 따라서 엉망인 stat 호출을 피합니다. 이 비트는 인덱스의 파일 항목이 변경 될 때마다 (따라서 파일이 업스트림으로 변경 될 때) 손실됩니다.

skip-worktree 는 그 이상입니다 : git 파일이 수정되었음을 reset --hard 으로 수정해야 함), 대신 색인의 버전을 사용하여 수정되지 않은 것처럼 가장합니다. . 이는 인덱스가 삭제 될 때까지 지속됩니다.

이 차이의 결과와 일반적인 사용 사례에 대한 좋은 요약은 http://fallengamer.livejournal.com/93321.html에 있습니다.

그 기사에서 :

  • --assume-unchanged 는 개발자가 파일을 변경 해서는 안된다고 가정합니다. 이 플래그는 SDK와 같이 변경되지 않는 폴더의 성능을 개선하기위한 것입니다.
  • --skip-worktree 는 개발자가 파일을 변경해야하기 때문에 git에게 특정 파일을 건드리지 않도록 지시 할 때 유용합니다. 예를 들어, 메인 저장소 업스트림이 일부 프로덕션 준비 구성 파일을 호스팅하고 실수로 해당 파일에 변경 사항을 커밋하지 않으려는 경우 --skip-worktree 가 정확히 원하는 것입니다.
출처 : https://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip-worktree
728x90
반응형