Skip to content
Back to skills

Worktree Manager

ASecurity

Git Worktree 隔離管理,建立獨立開發環境避免影響主分支。當提到 worktree、分支隔離、隔離開發環境時自動啟用。

  • 12 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 19, 2026
ai-agentsbashnodegit

Works with

  • claude code
  • cli

Security analysis

A100/100

Scanned October 19, 2026

npx -y skills add kopp0510/claude-dd --skill worktree-manager --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Worktree Manager?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Worktree Manager
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kopp0510-worktree-manager/badge)](https://www.skillsdirectory.com/skills/kopp0510-worktree-manager)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: worktree-manager
description: Git Worktree 隔離管理,建立獨立開發環境避免影響主分支。當提到 worktree、分支隔離、隔離開發環境時自動啟用。
allowed-tools: Read, Write, Edit, Grep, Glob, Bash
---

# Worktree Manager

> **原生優先(Claude Code ≥ 2.1.198)**:原生 `EnterWorktree` 工具、CLI `--worktree` 與
> subagent `isolation: worktree` 已涵蓋建立、會話遷移與自動清理 — **先用原生**。
> 本 skill 只處理原生不覆蓋的場景:自訂位置慣例、依賴安裝與基線測試、舊版 Claude Code。

收尾第 1 步借鑑 michael-denyer/pstack-claude 的 worktree-cleanup playbook(被 ignore 的 `.env` 算「刪了就沒了」)。

## 建立流程

1. **前置檢查**:確認在 git repo 內、`git status --porcelain` 乾淨(有未提交變更先提示處理)、
   `git worktree list` 無同名衝突
2. **確認設定**(AskUserQuestion 一次問完):分支名(建議 `feature/<name>` 前綴)、
   位置(慣例:主 repo 平行目錄 `../<project>-worktree-<branch>`)、是否裝依賴
3. **建立**:`git worktree add -b <branch> <path> <base-branch>`
4. **環境設定**:裝依賴(npm/pip 等,依專案)、複製 `.env.example` → `.env`(如存在)
5. **基線測試**:跑既有測試記錄基線 — 失敗時警告但不阻止建立(帶著已知紅燈開發,
   之後才分得清是誰弄壞的)
6. **記錄**:在 worktree 根寫 `WORKTREE_INFO.md`(分支、base、路徑、基線結果)

## 收尾

開發完成後:

1. **先看 worktree 裡還剩什麼**:`git -C <path> status --porcelain --ignored`,每一行照下面的規則處理過再往下
   (git 2.42.0 與 2.54.0 實測,2026-10-19)。`!!` 那幾行處理完還是會留在輸出裡,這是正常的:
   - ` M`、`A ` 這類(還沒 commit 的變更)與 `??`(沒追蹤的檔):`git worktree remove` 會拒絕
     (「包含修改或未追蹤的檔案,使用 --force 刪除」,英文是 `contains modified or untracked files, use --force to delete it`)。
     **不要直接加 `--force`** —— 它會把這些連同下一種一起刪掉
   - `!!`(被 gitignore 的):remove **不會**拒絕,會跟著整個目錄**直接刪掉、不提示**。
     `node_modules/` 這種裝得回來的不用管;要留意的是只有這裡才有的檔,例如步驟 4 複製出來、之後又改過的 `.env`
     (用 `cmp -s <path>/.env <path>/.env.example` 比,只看結束碼:0 是一樣、1 是改過、2 是比不了(例如 `.env.example` 不在),
     1 和 2 都列進去問。`-s` 什麼都不印。**不要用 `diff`** —— 它會把填進去的金鑰印出來。macOS 與 busybox 的 `cmp` 實測,2026-10-19)
   - 上面兩種裡要留的、拿不準的:**列出來用 AskUserQuestion 一次問完**,不要自己選。` M`、`??` 可選 commit、搬到哪、刪掉;
     `!!` 只給搬到哪、刪掉 —— 被 ignore 的檔多半本來就不該進 git(例如 `.env`)。
     步驟 6 寫的 `WORKTREE_INFO.md` 每次都會出現在 `??`;它只記這個 worktree 的分支、路徑與基線結果,問的時候可以建議刪掉
2. 回主 repo `git worktree remove <path>` → `git worktree prune`

merge 與分支刪除由使用者決定,本 skill 不代決。

## 限制備忘

- 一個分支只能有一個 worktree;已被 worktree 佔用的分支不能再 checkout
- 子模組專案需特殊處理,先確認再建
- worktree 共用主 repo 的 `.gitignore`,`info/exclude` 也是共用的 —— 它住在 common dir,
  在哪一邊加規則,主 repo 與所有 worktree 都會生效(git 沒有 per-worktree exclude 機制;
  實測寫進 `.git/worktrees/<name>/info/exclude` 根本不被讀取)
- **worktree 內不可寫死 `.git/info/exclude`**:worktree 的 `.git` 是一個指向 gitdir 的**檔案**、
  不是目錄,照字面路徑寫入必定 `not a directory` 失敗(已複現,exit 1)。
  要取真實路徑用 `git rev-parse --path-format=absolute --git-path info/exclude`
  (`--path-format` 需 **git ≥ 2.31**,見該版 release notes;更早的版本只有
  `git rev-parse --git-path info/exclude`,回的是相對路徑)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.