Git School · FluxGit

Git worktree와 submodule: 이력의 소유로 선택

FluxGit ·

각 블록은 다른 경우이며 하나의 실행 스크립트가 아닙니다. 저장소에 맞는 경우를 선택하고 브랜치 이름, 경로와 VERIFIED_COMMIT을 바꾸세요. 중단 명령은 해당 작업이 진행 중일 때만 사용하며 두 대안을 모두 실행하지 마세요.

핵심 답변

같은 저장소에서 병렬 작업이나 브랜치 검토를 위한 다른 체크아웃이 필요하면 worktree를 씁니다. 부모가 다른 저장소의 특정 커밋을 의존성으로 기록해야 하면 submodule입니다. 하나는 공유 이력의 다른 작업 디렉터리이고 다른 하나는 자체 버전 이력과 부모의 선택입니다.

판단WorktreeSubmodule
이력같은 저장소의 객체와 참조 공유별도 자식 저장소의 커밋을 부모가 기록
파일별도 HEAD, 인덱스와 작업 디렉터리자식 체크아웃과 부모/인덱스 핀이 다를 수 있음
버전같은 저장소의 브랜치나 커밋선택한 자식 커밋이며 .gitmodules만으로 결정되지 않음
업데이트선택 브랜치를 검토하고 통합기록된 핀으로 체크아웃. --remote는 별도 선택
제한보통 브랜치당 하나의 체크아웃. 권한 격리가 아님여러 worktree에서 지원 불완전. 자식 작업 별도

예시와 전제 조건

먼저 이력을 누가 관리하는지 결정합니다. 같은 앱의 대안 수정을 두 에이전트가 시험한다면 보통 별도 브랜치와 작업 트리가 맞습니다. 자체 릴리스가 있는 라이브러리는 고정 의존성이 맞을 수 있습니다. 둘 다 권한 sandbox가 아니므로 파일과 에이전트 권한은 별도 관리합니다.

변경 전에 상태 확인

연결 worktree는 자체 HEAD, 인덱스와 파일을 갖고 객체와 대부분의 참조를 공유합니다. 현재 편집을 바꾸지 않고 다른 브랜치를 검토할 수 있습니다. Git은 보통 같은 브랜치의 동시 체크아웃을 막습니다. 객체 공유가 미스테이지 편집을 다른 디렉터리로 자동 전달하지는 않습니다.

git status --short
git branch --show-current
git worktree list

참조나 별도 체크아웃 보존

상태를 확인하고 ../topic-review에 review/worktree를 만듭니다. git -C로 그 체크아웃과 커밋을 확인한 뒤 선택한 결과를 통합하세요. 디렉터리 분리는 작업 혼동을 줄이지만 변경의 호환성을 보장하지 않습니다. 통합을 검사하고 같은 체크아웃을 두 도구가 동시에 수정하지 않도록 합니다.

git worktree add -b review/worktree ../topic-review HEAD
git -C ../topic-review status --short
git -C ../topic-review branch --show-current

첫 번째 절차

submodule은 부모 경로 안의 별도 저장소입니다. 부모의 커밋 트리는 보통 모드 160000 gitlink로 자식 커밋을 기록합니다. 부모 인덱스는 다른 커밋을 준비할 수 있고 자식 HEAD는 둘과 다를 수 있습니다. .gitmodules는 경로와 URL을 설명하며 버전 선택은 기록된 커밋입니다.

다른 결과를 의도적으로 선택

deps/library에서는 submodule status, 부모 HEAD gitlink, 인덱스 gitlink, 자식 HEAD를 따로 확인합니다. 부모 pull로 핀이 바뀌어도 자식 체크아웃은 그대로일 수 있습니다. submodule update는 기록된 선택을 사용하며 --remote는 별도 원격 버전 선택입니다. 상태 표시를 없애려고만 사용하지 마세요.

git submodule status -- deps/library
git ls-tree HEAD -- deps/library
git ls-files --stage -- deps/library
git -C deps/library rev-parse HEAD
git --no-optional-locks -C deps/library status --short

제한과 예외

Git은 여러 worktree에서 submodule 지원이 불완전하다고 문서화합니다. --recursive만으로 모든 조합이 지원되는 격리 환경이 되지 않습니다. 제한과 실제 체크아웃·업데이트를 검토하고 독립 상태가 필요하면 별도 clone을 고려합니다. 이 비교는 조합 자동화의 만능 절차가 아닙니다.

충돌과 정리

worktree를 제거하기 전에 미커밋 파일과 브랜치를 확인하고 폴더를 무작정 지우지 말고 worktree remove를 씁니다. 필요한 브랜치나 검토한 병합을 보존하세요. 의존성 핀을 바꾸기 전 자식의 절차로 커밋·공개해 다른 clone이 받을 수 있게 하고 부모에 선택을 기록합니다.

git -C ../topic-review status --short
git worktree remove ../topic-review
git worktree list

결과 확인

worktree는 브랜치, 상태와 통합 결과를 검사합니다. submodule은 세 상태를 비교하고 의도한 사용자가 자식 객체를 받을 수 있는지 확인합니다. 부모가 깨끗해도 자식 트리가 모두 깨끗하지 않을 수 있습니다. 둘 다 미커밋 파일을 영구 백업하지 않습니다.

git worktree list
git submodule status -- deps/library

자주 묻는 질문

worktree는 현재 체크아웃을 대체하지 않고 다른 브랜치에서 일하려고 씁니다. submodule은 별도 버전 의존성을 부모에서 고정할 때 씁니다. 별도 업데이트 규칙은 조정 비용이 듭니다. 패키지 관리자, vendoring, subtree나 별도 clone 중 버전 소유와 전달 방식에 맞게 선택하며 보편적인 승자는 없습니다.

FluxGit에서 작업 검토

FluxGit의 시각적 이력과 변경 보기로 작업과 관련 커밋을 검토하세요. 이 예시의 브랜치, 공유 여부와 로컬 파일 검사를 유지합니다. 다운로드 페이지에서 현재 제공되는 빌드와 플랫폼을 확인할 수 있습니다.

Git 공식 문서

관련 절차

FluxGit 다운로드