以 worktree 建立工作包分支並備妥隔離環境 #40
Notifications
Due Date
No due date set.
Blocks
Depends on
#41 以 pr-watch 回報 PR 現況並清理工作樹
plugins/tea-sdlc
#42 以 sdlc-fix 定位工作包的工作樹
plugins/tea-sdlc
#11 以 sdlc-feat 領取工作包、起錶並備妥分支
plugins/tea-sdlc
Reference: plugins/tea-sdlc#40
Reference in New Issue
Block a user
母議題
#38 — 以 worktree 隔離平行工作包的實作與修正
要做出什麼
開發者領取工作包時,不再在原地切換分支,而是拿到一棵屬於這顆工作包的獨立工作樹(worktree)。從此他同時持有幾顆工作包都互不干擾:各自的未提交變更、各自的建置產物,而 agent 無論什麼時候去讀檔,都只會讀到它該讀的那份程式碼。
工作樹一律建立,沒有例外。建立失敗時明確報錯中止,不默默退回原地切分支——靜默降級會讓使用者以為自己在隔離環境裡,其實在原地改。
建分支與建工作樹是同一個原子動作:先
git fetch更新遠端引用,再以一次git worktree add -b {新分支} {推導路徑} origin/{來源分支}完成。一律從遠端的來源分支長出,起點永遠是最新的;遠端不存在該來源分支時明確中止,不退回本機同名分支。不設 upstream——此刻遠端還沒有這個新分支,設了會誤指到來源分支,之後git pull會把來源分支的提交拉進來。工作樹路徑由
owner/repo/分支名正規化後取雜湊推導,不需要任何本機對照表或狀態檔,換機器推導結果一樣。碼錶要等工作樹建成之後才起動。現行流程把起錶排在分支處理之前,而工作樹建立失敗會中止——錶已經起了才失敗,使用者會被計一段什麼都沒做的時間,而工時要準正是工時報表的立足點。
工作樹建好後印出提示:它是乾淨的,沒有依賴也沒有建置產物。安裝指令依專案檔偵測產生,偵測不到就只說明它是乾淨的。機密檔案一律不自動複製。
本工作包取代 #11 驗收標準第 4 條(「來源分支在遠端已存在時執行 pull 而非重建」),#11 本身不修改,實作時以 #38 為準。
驗收標準
~/.tea-sdlc/worktrees/{hash},hash為正規化後owner/repo/分支名的 sha256 前 12 碼feat/a-b/main與feat/a/b/main不撞名git fetch更新遠端引用git worktree add -b {新分支} {推導路徑} origin/{來源分支}完成,不拆成先建分支再建工作樹node_modules、vendor、建置快取或任何機密檔案--dry-run輸出將執行的 git 指令而不實際執行阻擋於