From 85da0e4f66f28d9859d4d99f35e418b7d6adcb3c Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:12:56 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 ++ README.md | 3 + commands/create-worktrees.md | 386 +++++++++++++++++++++++++++++++++++ plugin.lock.json | 45 ++++ 4 files changed, 446 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/create-worktrees.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..da43c0e --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "create-worktrees", + "description": "Creates git worktrees for all open PRs or specific branches, handling branches with slashes, cleaning up stale worktrees, and supporting custom branch creation for development.", + "version": "1.0.0", + "author": { + "name": "ClaudeForge Community", + "url": "https://github.com/claudeforge/marketplace" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2b70a6a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# create-worktrees + +Creates git worktrees for all open PRs or specific branches, handling branches with slashes, cleaning up stale worktrees, and supporting custom branch creation for development. diff --git a/commands/create-worktrees.md b/commands/create-worktrees.md new file mode 100644 index 0000000..c2fc000 --- /dev/null +++ b/commands/create-worktrees.md @@ -0,0 +1,386 @@ +--- +allowed-tools: Bash, Read, Write, Edit, Grep, Glob +description: Create and manage Git worktrees for parallel development and efficient branch management +--- + +# Create Worktrees Command + +Set up Git worktrees to work on multiple branches simultaneously without switching contexts. + +## Usage + +```bash +/create-worktrees [base_branch] [path] +``` + +**Examples:** +```bash +/create-worktrees feature/new-auth # Create worktree for new branch +/create-worktrees hotfix/security-patch main # Create from main branch +/create-worktrees feature/api-v2 develop ../worktrees/api-v2 # Custom path +``` + +## What This Command Does + +Creates Git worktrees that allow you to: + +1. **Work on Multiple Branches**: Switch between features without stashing +2. **Parallel Development**: Build/test different branches simultaneously +3. **PR Reviews**: Check out PRs without affecting main work +4. **Hotfix Management**: Work on urgent fixes while continuing feature work +5. **Efficient Testing**: Compare changes across branches easily + +## Git Worktrees Explained + +A worktree is a linked working directory that shares the same Git repository: + +``` +project/ +├── .git/ # Main repository +├── src/ # Main branch +└── ../worktrees/ + ├── feature-a/ # Worktree for feature-a branch + ├── feature-b/ # Worktree for feature-b branch + └── pr-123/ # Worktree for PR review +``` + +**Benefits**: +- No need to stash changes when switching branches +- Run tests on multiple branches simultaneously +- Keep builds for different branches ready +- Review PRs without disrupting current work + +## Creating Worktrees + +### Basic Worktree Creation + +```bash +# Create worktree for new branch +git worktree add ../worktrees/feature-xyz -b feature/xyz + +# Create from existing branch +git worktree add ../worktrees/hotfix origin/hotfix/security + +# Create from specific commit +git worktree add ../worktrees/test-v1 abc123 +``` + +### Recommended Workflow + +**Step 1: Create Worktree** +```bash +# Create worktree directory structure +mkdir -p ../worktrees + +# Add worktree for new feature +git worktree add ../worktrees/feature-auth -b feature/user-auth + +# Navigate to worktree +cd ../worktrees/feature-auth +``` + +**Step 2: Work in Worktree** +```bash +# Make changes +vim src/auth/login.js + +# Commit normally +git add . +git commit -m "Add user authentication" +git push -u origin feature/user-auth +``` + +**Step 3: List Worktrees** +```bash +git worktree list +# Output: +# /path/to/project abc123 [main] +# /path/to/worktrees/feature-auth def456 [feature/user-auth] +``` + +## Common Use Cases + +### 1. PR Review Workflow + +Review pull requests without affecting your current work: + +```bash +# Fetch PR branch +gh pr checkout 123 + +# Or manually +git fetch origin pull/123/head:pr-123 +git worktree add ../worktrees/pr-123 pr-123 + +# Review the code +cd ../worktrees/pr-123 +npm install +npm test +npm run build + +# Return to your work +cd ../../project +``` + +### 2. Multi-Feature Development + +Work on multiple features simultaneously: + +```bash +# Feature A +git worktree add ../worktrees/feature-a -b feature/payment-gateway +cd ../worktrees/feature-a +npm install +npm run dev # Runs on port 3000 + +# Feature B (in another terminal) +cd /path/to/project +git worktree add ../worktrees/feature-b -b feature/notification-system +cd ../worktrees/feature-b +npm install +PORT=3001 npm run dev # Runs on port 3001 +``` + +### 3. Hotfix While Developing + +Handle urgent fixes without stashing feature work: + +```bash +# You're working on a feature +cd /path/to/worktrees/feature-dashboard + +# Urgent hotfix needed +cd /path/to/project +git worktree add ../worktrees/hotfix-urgent -b hotfix/security-patch main +cd ../worktrees/hotfix-urgent + +# Fix the issue +vim src/security/validator.js +git add . +git commit -m "Fix security vulnerability" +git push -u origin hotfix/security-patch + +# Create PR for hotfix +gh pr create --title "Security patch" --base main + +# Return to feature work +cd ../feature-dashboard +``` + +### 4. Testing Across Branches + +Compare behavior across different branches: + +```bash +# Main branch +cd /path/to/project +npm test + +# Feature branch +cd ../worktrees/feature-new-api +npm test + +# Compare results side by side +``` + +## Managing Worktrees + +### List Worktrees + +```bash +# List all worktrees +git worktree list + +# Detailed view +git worktree list --porcelain +``` + +### Remove Worktrees + +```bash +# Remove worktree (safe - checks for uncommitted changes) +git worktree remove ../worktrees/feature-completed + +# Force remove (use with caution) +git worktree remove --force ../worktrees/abandoned-feature + +# Or manually delete and prune +rm -rf ../worktrees/old-feature +git worktree prune +``` + +### Clean Up Stale Worktrees + +```bash +# Show stale worktrees +git worktree prune --dry-run + +# Remove stale references +git worktree prune +``` + +## Advanced Techniques + +### Batch Create Worktrees for PRs + +```bash +# Create worktrees for multiple PRs +gh pr list --json number,headRefName --limit 5 | \ + jq -r '.[] | "\(.number) \(.headRefName)"' | \ + while read -r pr_num branch; do + git worktree add "../worktrees/pr-$pr_num" "$branch" 2>/dev/null || \ + git worktree add "../worktrees/pr-$pr_num" -b "$branch" "origin/$branch" + done +``` + +### Worktree with Environment Setup + +```bash +# Create worktree with automatic setup +create_worktree_with_setup() { + local branch=$1 + local path="../worktrees/$branch" + + git worktree add "$path" -b "$branch" + cd "$path" + + # Setup environment + npm install + cp ../.env.example .env + + # Run initial build + npm run build + + echo "Worktree ready: $path" +} + +create_worktree_with_setup "feature/new-feature" +``` + +### Shared Build Cache + +Optimize build times by sharing node_modules: + +```bash +# Symbolic link to shared node_modules +cd ../worktrees/feature-a +ln -s ../../project/node_modules node_modules +``` + +## Best Practices + +### 1. Organize Worktrees + +Keep worktrees in a dedicated directory: +``` +project/ +├── .git/ +├── src/ +└── ../worktrees/ + ├── features/ + │ ├── auth/ + │ └── dashboard/ + ├── hotfixes/ + │ └── security-patch/ + └── reviews/ + ├── pr-123/ + └── pr-124/ +``` + +### 2. Naming Conventions + +Use consistent naming: +- Features: `feature-{name}` +- Hotfixes: `hotfix-{issue}` +- PRs: `pr-{number}` +- Tests: `test-{scenario}` + +### 3. Clean Up Regularly + +Remove merged worktrees: +```bash +# After PR is merged +git worktree remove ../worktrees/feature-completed +git branch -d feature/completed +git push origin --delete feature/completed +``` + +### 4. Documentation + +Track worktrees in your project: +```bash +# Create worktree registry +echo "# Active Worktrees" > .worktrees.md +git worktree list >> .worktrees.md +``` + +## Common Issues & Solutions + +### Issue: "Already checked out" +```bash +# Error: branch is already checked out +# Solution: Use a worktree or checkout in different location +git worktree add --detach ../worktrees/temp +cd ../worktrees/temp +git checkout feature/branch +``` + +### Issue: "Worktree path exists" +```bash +# Error: directory already exists +# Solution: Remove existing directory +rm -rf ../worktrees/old-path +git worktree add ../worktrees/old-path -b new-branch +``` + +### Issue: Missing dependencies +```bash +# Each worktree needs its own node_modules +cd ../worktrees/new-feature +npm install + +# Or use shared cache (use with caution) +npm ci --cache ../cache +``` + +## Performance Tips + +1. **Limit Active Worktrees**: Keep 3-5 active worktrees max +2. **Share Git Objects**: Worktrees share the .git directory automatically +3. **Exclude from Backup**: Add worktrees directory to backup exclusions +4. **Use Shallow Clones**: For temporary review worktrees +5. **Clean Up Regularly**: Remove merged or abandoned worktrees + +## Safety Guidelines + +1. **Always commit before removing**: Ensure no uncommitted changes +2. **Check worktree status**: Use `git worktree list` before operations +3. **Avoid nested worktrees**: Don't create worktrees inside worktrees +4. **Backup important work**: Push branches before removing worktrees +5. **Use prune carefully**: Run `git worktree prune --dry-run` first + +## Integration with IDEs + +### VS Code +```bash +# Open worktree in new window +code ../worktrees/feature-auth + +# Or add to workspace +code --add ../worktrees/feature-auth +``` + +### JetBrains IDEs +```bash +# Open worktree as new project +idea ../worktrees/feature-auth +``` + +## Methodology + +Git worktrees enable efficient parallel development by: +- **Context Preservation**: Keep each branch's build and state separate +- **Quick Switching**: Move between branches instantly (just cd) +- **Parallel Builds**: Test multiple configurations simultaneously +- **Safe Experimentation**: Isolated environments for each branch +- **Efficient Reviews**: Check PRs without disrupting current work diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..d84ab4d --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:claudeforge/marketplace:plugins/commands/create-worktrees", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "0f0a26f2a1aa87633554c816023ba70962fa365b", + "treeHash": "12b22ad63ee5e23838f3d1db6240401f3f335da415fef979763f3f35ca06c905", + "generatedAt": "2025-11-28T10:15:27.762102Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "create-worktrees", + "description": "Creates git worktrees for all open PRs or specific branches, handling branches with slashes, cleaning up stale worktrees, and supporting custom branch creation for development.", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "9a9bedd0f4637c88863d7dbdc1c804c3c122c7beaf452ed130b1170d78ff74e4" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "c8cf90442aa9a35a9a569824a29792ccaddfc9593afc2aee65c44618d8e0822f" + }, + { + "path": "commands/create-worktrees.md", + "sha256": "e90fe0367d4ac447b325efb6808556129ef0fde2763ff5d225d243c05ada5f0c" + } + ], + "dirSha256": "12b22ad63ee5e23838f3d1db6240401f3f335da415fef979763f3f35ca06c905" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file