Files
Aislo/docs/raw/guidelines/worktree_setup.md
T
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록)
- `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록
  — 창끼리 공유하되 저장소에는 안 올리는 장부
- 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠)
- graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 18:19:07 +09:00

110 lines
5.4 KiB
Markdown

# 보조 워크트리 만들기 (PC마다 1개)
작성 2026-08-31. 대상 = 각 PC에서 일하는 AI. 이 문서대로 하면 한 PC에서 창 두 개가
서로 밟지 않고 동시에 일한다.
## 왜 이렇게 하나
- **동기화 밖에 둔다.** `C:\Program_coding` 은 Synology Drive 동기화 루트다. 워크트리를
그 안에 두면 NAS 사본이 편집을 되돌린다(2026-08-31에 `.claude/dev_up.py` 가 두 번
옛 사본으로 덮였다). 그래서 워크트리는 **동기화 루트 밖**에 만든다.
- **포트를 나눈다.** 두 폴더가 같은 포트를 쓰면 나중에 뜬 쪽이 앞의 것을 죽인다.
- **브랜치를 나눈다.** git 은 같은 브랜치를 두 워크트리가 동시에 체크아웃하지 못한다.
## 이름 규칙
| 대상 | 규칙 | 이 PC(노트북)의 실제 값 |
|---|---|---|
| 폴더 | 동기화 루트 밖, `C:\Aislo_wt\<이름>` | `C:\Aislo_wt\aislo-b0506` |
| 메인 폴더 브랜치 | `main` 또는 `main_<pc>_<번호>` | `main` |
| 보조 트리 브랜치 | `sub_<pc>_<번호>` | `sub_laptop_1` |
PC 이름을 브랜치에 박아 두면 원격 목록만 봐도 어느 기계 것인지 갈린다
(현재 원격: `main`, `main_desktop_1`, `main_laptop_1`, `sub_laptop_1`).
## 만드는 절차
먼저 그 PC의 동기화 루트를 확인한다 — `.SynologyWorkingDirectory` 파일이 있는 폴더가
루트다. 새 워크트리 경로가 그 아래로 들어가면 안 된다.
```powershell
# 1) 워크트리 생성 (메인 폴더에서 실행)
New-Item -ItemType Directory C:\Aislo_wt
git -C "<메인 폴더>" worktree add C:\Aislo_wt\<이름> -b sub_<pc>_<번호> origin/main
# 2) 메인 폴더와 한 벌로 쓸 것들을 링크로 연결 (전부 gitignore 대상이라 안 딸려온다)
$M = "<메인 폴더>"; $W = "C:\Aislo_wt\<이름>"
New-Item -ItemType Junction $W\venv -Target $M\venv
New-Item -ItemType Junction $W\.claude -Target $M\.claude
New-Item -ItemType Junction $W\docs -Target $M\docs
New-Item -ItemType Junction $W\storage -Target $M\storage
New-Item -ItemType SymbolicLink $W\CLAUDE.md -Target $M\CLAUDE.md
New-Item -ItemType SymbolicLink $W\AGENTS.md -Target $M\AGENTS.md
# 3) 프론트 의존성 (워크트리마다 따로 필요)
cd $W\config; npm install
```
`graphify-out` 링크가 있다면 옛 경로를 가리키므로 새로 건다 —
대상은 `<메인 폴더>\docs\wiki\graphify-out\<날짜>`.
## 서버 띄우기 — 포트가 갈린다
| 폴더 | 백엔드 | vite |
|---|---|---|
| 메인 | 8000 | 5173 |
| 보조 | 8001 | 5174 |
메인 폴더는 그대로다.
```powershell
./venv/Scripts/python.exe .claude/dev_up.py
```
보조 트리는 `dev_up.py` 가 8000·5173 고정이라 **환경변수를 주고 직접 띄운다**.
```powershell
$env:SERVER_PORT='8001'; $env:FRONTEND_DEV_PORT='5174'; $env:AISLO_API_PORT='8001'
Start-Process "$W\venv\Scripts\python.exe" -ArgumentList 'main.py' -WorkingDirectory $W `
-RedirectStandardOutput "$W\tmp\server.log" -RedirectStandardError "$W\tmp\server.err.log"
$env:AISLO_VITE_PORT='5174'
Start-Process "$W\venv\Scripts\python.exe" -ArgumentList '.claude\browser_driver.py' `
-WorkingDirectory $W -RedirectStandardOutput "$W\tmp\browser_driver.out.log" `
-RedirectStandardError "$W\tmp\browser_driver.err.log"
```
각 변수가 하는 일 — `SERVER_PORT` 백엔드, `FRONTEND_DEV_PORT` vite, `AISLO_API_PORT`
vite 프록시가 볼 백엔드(`config/vite.config.ts`), `AISLO_VITE_PORT` 브라우저 드라이버가
열 주소. 넷을 한 벌로 맞춰야 프록시가 옆 포트로 새지 않는다.
확인: `5174/api/health` 가 200이면 프록시가 8001을 보고 있는 것이다.
**백엔드·DB 는 원래 한 벌을 공유해도 된다.** 백엔드를 고치는 작업일 때만 8001을 따로 띄운다.
프론트만 만질 때는 vite 만 5174로 올리고 `AISLO_API_PORT=8000` 을 주면 된다.
## 지켜야 할 것
- **`git worktree remove` 를 쓰지 않는다.** Windows 긴 경로(`node_modules`)에서 실패하면
공유 `.git``.claude` 까지 지운다(2026-08-30 실제 사고 2건). 폴더 정리가 필요하면
사용자에게 요청한다. 옮기는 것은 `git worktree move` 로 안전하다 — 폴더 이동과 포인터
두 개를 git 이 같이 고친다.
- **워크트리를 지울 때는 링크부터 끊는다.** `.claude`·`docs`·`storage`·`venv` 는 메인
폴더를 가리키는 링크라, 재귀 삭제가 링크를 따라가면 원본이 날아간다. `cmd /c rmdir <링크>`
로 링크만 먼저 떼고 폴더를 지운다.
- **커밋했으면 그 자리에서 push.** PC 이동이 곧 인수인계다. 로컬에만 있으면 다음 PC가 못 받는다.
- **같은 브랜치를 두 트리가 못 쓴다.** 메인이 `main` 을 물고 있으면 보조는 `sub_*` 여야 한다.
- **공유되는 것을 기억한다** — `venv` `.claude` `docs`(PLAN.md) `storage`(프로젝트 자료), DB.
코드 파일만 갈릴 뿐 이것들은 한 벌이다. `PLAN.md` 는 자기 섹션만 고친다.
- **`.claude/` 는 git 밖이고 동기화 안이다.** 두 PC의 AI가 같은 파일을 고치면 나중 동기화가
앞의 것을 덮는다. 고치기 전에 사용자에게 알린다.
## 이 PC(노트북) 현재 상태
```
C:\Program_coding\임도설계 및 견적자동화 프로그램 개발 [main] 8000 · 5173
C:\Aislo_wt\aislo-b0506 [sub_laptop_1] 8001 · 5174
```
원격에 `sub_laptop_1` 을 미리 만들어 두었다(`origin/sub_laptop_1`, main 과 같은 지점).