로컬 변경으로 스파스 체크아웃을 위한 인덱스를 재생성하는 방법은 무엇입니까?

로컬 변경으로 스파스 체크아웃을 위한 인덱스를 재생성하는 방법은 무엇입니까?

나는 매우 큰 모놀리식 저장소의 하위 집합을 작업하기 위해 희소 체크아웃과 함께 git을 사용합니다. 성능은 희박한 체크아웃이 있으면 좋지만 없으면 끔찍합니다.

때때로 내 인덱스가 손상될 수 있습니다(Xcode의 git 통합이 일반적인 근본 원인이지만 다양한 방법으로 관리했습니다).

일반 작업 트리의 경우에는 괜찮습니다. 인덱스 파일을 삭제하고 git reset단계적으로 변경하여 단계적이지 않은 상태로 되돌아갔을 수도 있지만 일반적으로 중요한 내용은 잃지 않습니다.

그러나 희소 체크아웃의 경우 git reset깨끗한 슬레이트에서 희소 매니페스트를 고려하지 않으므로 작업 트리에 없는 전체 저장소의 모든 파일(즉, 내 희소 체크아웃에서 제외된 모든 파일)이 있어야 한다고 결론을 내립니다. 삭제되어 엄청난 양의 "삭제된" 파일 목록이 남게 되었습니다.

따라서 희박한 체크아웃 정보(예: Skip-worktree 플래그 설정)를 사용하여 인덱스를 재설정하는 권장 방법은 을 호출하는 것입니다 git read-tree -mu HEAD. 하지만 이 방법을 사용하려면 미단계 변경 사항이 없어야 하고, 미단계 변경 사항을 유지해야 하며 커밋할 수 없습니다. 인덱스가 없기 때문에 (그리고 모든 "삭제된" 파일이 주어지면 파일을 확인하는 데 매우 오랜 시간이 걸리므로 git이 해당 파일이 없다는 것을 알게되면 다시 삭제할 수 있습니다) 스파스 체크아웃).

로컬 변경 사항을 잃어버리고 싶다면 대신 git read-tree -m --reset HEAD에 전화하면 됩니다. 그러나 커밋되지 않은 변경 사항을 유지하는 것이 목표이기 때문에 그것만으로는 충분하지 않습니다.

답변1

지금까지 내가 찾은 가장 좋은 해결책은 모든 변경 사항을 임시 위치로 이동하고 실행한 git read-tree -mu HEAD다음 git이 생성한 모든 파일을 삭제하고 원래 변경 사항으로 바꾸는 것입니다.

이는 git이 모든 희소 체크아웃 파일을 다시 생성할 때까지 기다리는 것을 의미하지만 적어도 체크아웃하고 싶지 않은 저장소의 다른 모든 파일이 생성될 때까지 기다릴 필요는 없습니다.많이더 길게).

관련 정보