워크스페이스 격리
Verdent가 git worktree로 병렬 코드 변경을 분리하는 방법
워크스페이스 격리는 git worktree를 사용해 파일 시스템 수준에서 병렬 코드 변경을 분리합니다. 워크스페이스에는 자체 디렉터리, 브랜치 체크아웃, 파일, 스테이징 상태가 있습니다.
현재 Verdent Desktop 인터페이스에서는 수동 워크스페이스 생성이 제공되지 않습니다. New Workspace 버튼, 해당 키보드 단축키, Duplicate to New Workspace는 숨겨져 있습니다. 응답을 복제하면 현재 워크스페이스에 새 작업이 생성됩니다.
배울 내용
- 워크스페이스 격리가 충돌을 방지하는 방법
- git worktree가 격리를 가능하게 하는 방법
- Base Workspace와 워크스페이스의 차이
- 기존 워크스페이스와 Verdent가 관리하는 워크스페이스가 인터페이스에 표시되는 방식
- 워크스페이스 관리 모범 사례
워크스페이스 격리란?
Verdent가 별도 워크스페이스에서 작업을 실행하면, 한 worktree의 변경 사항이 다른 worktree의 파일이나 스테이징 상태를 수정하지 않습니다. 따라서 병렬 구현과 리뷰를 더 안전하게 진행할 수 있습니다.
작동 방식
| 계층 | 작동 방식 |
|---|---|
| 디렉터리 | 각 워크스페이스는 격리된 디렉터리입니다 |
| 브랜치 | 각 워크스페이스에는 자체 브랜치 체크아웃이 있습니다 |
| 파일 | 한 워크스페이스의 파일 변경은 다른 워크스페이스에 영향을 주지 않습니다 |
| 스테이징 | 각 워크스페이스에는 자체 스테이징 영역이 있습니다 |
장점
간섭 없음
파일 변경은 별도의 worktree 디렉터리에 유지됩니다
안전한 실험
안정적인 코드에 영향을 주지 않고 위험한 변경을 시도할 수 있습니다
명확한 비교
git diff를 사용해 워크스페이스별 접근 방식을 비교할 수 있습니다
선택적 리베이스
신뢰하는 결과만 리베이스합니다
Base Workspace와 워크스페이스
Base Workspace
Base 워크스페이스는 원래 저장소 체크아웃이며, 기본 시작점 역할을 합니다.
| 특성 | 설명 |
|---|---|
| 위치 | 원래 git clone 또는 init 위치 |
| 기본 브랜치 | 일반적으로 main 또는 개발 브랜치 |
| 기준점 | 실험 작업을 비교하는 기준 소스 |
Base를 사용할 때:
- 격리가 필요 없는 빠른 변경
- 실험 작업을 비교하기 위한 기준점
- 변경 사항을 main 브랜치에 직접 반영하고 싶을 때
- 병렬 실행이 필요 없는 단순한 작업
워크스페이스
워크스페이스는 git worktree를 사용해 만든 격리된 작업 환경이며, 자체 독립 브랜치 체크아웃과 파일 상태를 가집니다.
지원되는 워크플로에서 격리된 코드 변경이 필요할 때 Verdent는 워크스페이스를 사용할 수 있습니다. 기존 워크스페이스는 해당 프로젝트와 계속 연결되며 여러 작업을 포함할 수 있습니다.
기존 워크스페이스로 작업하기
이미 프로젝트에 속한 워크스페이스는 Projects 패널에서 해당 프로젝트 아래에 함께 그룹화됩니다. 워크스페이스를 선택해 작업과 파일 상태를 확인합니다.
- 같은 워크스페이스 안의 작업은 파일을 공유하지만, 대화 컨텍스트는 별도로 유지합니다.
- 다른 워크스페이스로 전환하면 활성 worktree와 브랜치 컨텍스트가 변경됩니다.
- 응답을 복제하면 복제된 작업은 현재 워크스페이스에 유지됩니다.
- 필요한 작업을 커밋, 리베이스하거나 다른 방식으로 보존한 뒤에만 워크스페이스를 삭제합니다.
워크스페이스 변경 사항 리베이스
워크스페이스 변경 사항을 main 브랜치에 다시 통합할 준비가 되면 다음을 진행합니다.
Verdent UI 사용
작업 완료
워크스페이스에서 작업을 완료합니다
변경 사항 검토
가운데 패널에서 Task Changes를 선택해 모든 수정 사항을 검토합니다
main 브랜치로 리베이스
Workspace Bar에서 Workspace Actions → Rebase to main branch를 선택합니다
충돌 해결
메시지가 표시되면 충돌을 해결합니다
확인
확정하기 전에 변경 사항을 검토합니다
워크스페이스 최신 상태 유지
Workspace Actions → Sync with main branch를 사용해 main 브랜치의 최신 변경 사항을 워크스페이스로 가져옵니다. 이렇게 하면 리베이스할 때 큰 충돌을 방지하는 데 도움이 됩니다.
모범 사례
워크스페이스 유지 관리
| 실천 방법 | 이유 |
|---|---|
| 리베이스한 워크스페이스 삭제 | 디스크 공간을 확보합니다 |
| 중단한 실험 제거 | 워크스페이스 목록을 관리하기 쉽게 유지합니다 |
| 워크스페이스 수를 적정하게 유지 | 시스템 리소스는 한정되어 있습니다 |
Git 관리
| 실천 방법 | 이유 |
|---|---|
| 자주 커밋 | 전환하기 전에 진행 중인 작업을 커밋합니다 |
| 작은 커밋 | 작은 커밋은 cherry-pick하기 더 쉽습니다 |
| base와 정기적으로 동기화 | 워크스페이스가 main 브랜치에서 너무 멀리 갈라지지 않게 합니다 |
| 충돌 복잡도 줄이기 | 정기적인 통합은 큰 충돌을 방지합니다 |
FAQ
각 워크스페이스는 디스크 공간을 얼마나 사용하나요?
각 워크스페이스는 작업 파일을 복제하지만 .git 디렉터리는 공유합니다. 공간 사용량은 대략 워크스페이스마다 프로젝트 크기와 비슷합니다. 여러 병렬 워크스페이스가 있는 대형 프로젝트는 상당한 디스크 공간을 사용합니다.
워크스페이스를 삭제할 수 있나요?
예. Verdent에서 워크스페이스를 삭제합니다. 디렉터리는 제거되지만 브랜치에 커밋된 작업은 보존됩니다.
새 워크스페이스는 어떻게 만드나요?
현재 Desktop 인터페이스에서는 수동 생성이 제공되지 않습니다. New Workspace 항목과 단축키는 숨겨져 있습니다. 그래도 Verdent는 지원되는 격리 워크플로에서 내부적으로 워크스페이스를 사용할 수 있습니다.
워크스페이스를 삭제하면 커밋하지 않은 변경 사항은 어떻게 되나요?
워크스페이스를 삭제하면 커밋하지 않은 변경 사항은 손실됩니다. 워크스페이스를 제거하기 전에 항상 변경 사항을 커밋하거나 stash합니다.
워크스페이스를 base 워크스페이스로 변환할 수 있나요?
직접 변환할 수는 없지만, 워크스페이스의 모든 변경 사항을 main 브랜치로 리베이스한 다음 워크스페이스를 삭제할 수 있습니다. 브랜치 기록은 보존됩니다.
worktree는 모든 git 호스팅 서비스에서 작동하나요?
예. Git worktree는 표준 git 기능입니다. GitHub, GitLab, Bitbucket, 기타 모든 git 호스팅 서비스와 함께 작동합니다.