using-git-worktreeslisted
Install: claude install-skill HarryJhin/groundwork
# using-git-worktrees
작업이 격리된 워크스페이스에서 일어나게 한다. 에이전트 실행 환경(이 스킬을 돌리는 코딩 에이전트 제품)이 워크트리 도구를 제공하면 그것을 우선한다. 없을 때만 수동 git worktree로 폴백한다.
**핵심 원칙**: 기존 격리를 먼저 탐지한다. 그다음 실행 환경의 도구. 그다음 git 폴백. 실행 환경과 싸우지 않는다.
## 입력·출력
**입력**은 새로 만들 브랜치 이름과 기능명이다. 호출자가 넘기면 그것을 쓰고, 넘기지 않으면 지금 착수하는 작업에서 짓되 사용자에게 한 번 확인받는다. 워크트리 디렉터리 선호는 아래 「디렉터리 선택」이 정한 순서로 찾는다.
**출력**은 준비된 워크스페이스의 경로와 브랜치 이름, 베이스라인 테스트 결과다. 3단계 보고 문안이 그 형식이고, 워크트리를 만들지 않은 경로에서는 그 사실을 대신 보고한다. 이 스킬은 다음 단계로 자동으로 넘기지 않고 호출자에게 돌아간다.
**경로 기준**: 이 문서의 상대 경로는 두 시점으로 갈린다. 0단계와 1단계의 경로는 시작 시점 repo 루트 기준이고, 2단계 이후의 경로는 새로 만든 워크스페이스 루트 기준이다. 각 셸 블록은 그 기준 디렉터리에서 돈다.
## 0단계. 기존 격리 탐지
**무엇을 만들기 전에 이미 격리된 워크스페이스에 있는지 확인한다.**
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
CURRENT_BRANCH=$(git branch --show-current)
```
**아래 셸 블록은 모두 같은 셸에서 돈다.** 여기서 잡은 값을 뒤 블록이 참조하므로, 셸이 끊기면 이 블록부터 다시 돌린다. `CURRENT_BRANCH`는 지금 있는 브랜치이고, 1b에서 새로 만들 브랜치는 `NEW_BRANCH`로 따로 잡는다.
**서브모듈 가드**: `GIT_DIR != GIT_COMMON`은 git 서브모듈 안에서도 참이다. "이미 워크트리다"라고 결론짓기 전에 서브모듈이 아닌지 확인한다.
```bash
# 경로가 나오면 워크트리가 아니라 서브모듈이다. 일반 repo로 취급한다
git rev-parse --show-superproject-working-tree 2>/dev/null
```
**`GIT_DIR != GIT_COMMON`이고 서브모듈이 아니면**: 이미 연결된 워크트리에 있다. 2단계(프로젝트 셋업)로 건너뛴다. 워크트리를 또 만들지 않는다.
브랜치 상태와 함께 보고한다.
- 브랜치 위: "이미 격리된 워크스페이스 `<경로>`, 브랜치 `<이름>`."
- detached HEAD: "이미 격리된 워��스페이스 `<경로>`(detached HEAD, 외부 관리). 종료 시점에 브랜치 생성이 필요하다."
**`GIT_DIR == GIT_COMMON`이거나 서브모듈이면*