SuperAPI AI 工具集

laravel-herd-worktrees

编程与开发

查看项目

更新于 10-23 16:19

技能介绍

用途

该技能面向在 macOS 上使用 Laravel Herd 托管 Laravel 项目的开发者,帮助创建、列出或删除 Git worktree。其核心目标是让同一 Laravel 项目的多个分支能够并行运行,每个分支通过各自的 *.test URL 访问,并保持依赖、环境变量、数据库和缓存的隔离。

主要能力

  • 为 Laravel 项目创建新的 Git worktree,并自动完成环境配置。
  • 列出或删除已有的 worktree,删除时可选择同时删除对应的数据库。
  • 通过 Herd 的 parked 目录机制,让每个 worktree 自动获得 <dir>.test 形式的访问 URL。
  • 支持为单个 worktree 隔离 PHP 版本(如 php@8.1)。
  • 提供针对 worktree 的隔离规则,覆盖 vendor/、node_modules/、.env、APP_KEY、数据库、Redis、storage/ 和 bootstrap/cache/ 等。
  • 提供常见问题的诊断命令和排查思路。

使用方式

一次性设置

将存放主检出的父目录进行 park:

cd ~/Code           # 你的 laravel 项目的父目录
herd park

验证:

herd parked

每个直接子目录都会成为 <name>.test。如果不想 park 父目录,可以使用 herd link 为每个 worktree 显式链接。

创建 worktree

使用辅助脚本:

bash scripts/worktree-new.sh <branch-suffix> <base-branch> [--driver sqlite|mysql|pgsql]

示例:

bash scripts/worktree-new.sh feat-billing main --driver sqlite

该脚本会创建 worktree、复制 .env、重写 APP_URL、DB_DATABASE 和缓存前缀、安装依赖、生成应用密钥并运行迁移。

删除 worktree

bash scripts/worktree-rm.sh <branch-suffix> [--drop-db]

按 worktree 切换 PHP 版本

cd ../myapp-legacy
herd isolate php@8.1

使用 herd isolated 列出所有覆盖,herd unisolate 恢复。

引导一个裸 worktree

对于用普通 git worktree add 创建的 worktree,需要手动复制 vendor/、node_modules/ 和 .env,并运行 composer install 等步骤。具体命令和注意事项见原文。

适用场景

  • 用户要求为 Herd 托管的 Laravel 应用创建 worktree。
  • 用户在切换 worktree 后遇到 vendor/、迁移、缓存或 .env 问题。
  • 用户希望获得类似 myapp-feat.test 的按分支 URL,而无需手动配置 Nginx/Valet。
  • 用户希望同一 Laravel 项目同时运行在多个 PHP 版本上。

限制

  • 仅适用于 macOS 上的 Laravel Herd,不适用于 Valet、Linux Herd 或 Docker/Sail。
  • worktree 目录名应仅使用 [a-z0-9-],否则 Herd 可能无法识别。
  • 必须为每个 worktree 单独生成 APP_KEY、设置唯一的 SESSION_COOKIE 和 REDIS_PREFIX,否则会出现跨分支泄漏。
  • vendor/ 和 node_modules/ 必须每个 worktree 独立,不能使用符号链接。
  • 在 worktree 内切换基础分支后,需要重新运行 composer install。