从 Git Worktrees 端到端测试微服务更改,避免终端标签爆炸
I’m happy to translate the article for you, but I’ll need the full text of the post (the parts you’d like translated). Could you please paste the article’s content here? Once I have it, I’ll provide a Simplified‑Chinese translation while preserving the source link, markdown formatting, and any code blocks or URLs unchanged.
TL;DR
我构建了一个名为 Recomposable 的可视化 CLI 工具,以解决在 Git 工作树中测试 Claude 生成的代码的痛点。
问题
在使用 Claude Code 与 Git worktree 时,通常会同时检出同一仓库的多个分支:
- Claude 在一个 worktree 中工作。
- 你在另一个 worktree 中审查/运行其余的堆栈。
这在单服务项目中还能正常运作,但在 微服务 架构下很快就会失效。
你需要验证 Claude 对 某个 服务所做的更改仍能与其余堆栈协同工作。这意味着:
- 仅从该 worktree 的代码 重新构建该服务。
- 让所有其他服务保持在
main分支上。
Docker Compose 并不认识 worktree——它只看到磁盘上的文件——因此你不得不手动处理大量路径切换。
手动工作流(当前状态)
| Step | What you do |
|---|---|
| 1️⃣ Find the worktree path | Claude 在 .claude/worktrees/ 目录下创建带有自动生成名称的 worktree。 bash\ngit worktree list\n# /Users/you/project abc1234 [main]\n# /Users/you/project/.claude/worktrees/jan-abc123 def5678 [fix‑oauth]\n |
| 2️⃣ Build the service from the worktree | 将 worktree 路径与 compose 文件路径组合,并指定要构建的服务。 bash\ndocker compose -f /Users/you/project/.claude/worktrees/jan-abc123/docker-compose.yml build auth-service\n |
| 3️⃣ Start it | bash\ndocker compose -f /Users/you/project/.claude/worktrees/jan-abc123/docker-compose.yml up -d auth-service\n |
| 4️⃣ Verify | 打开另一个终端,实时查看日志,访问服务,若失败则可能需要重新构建。 |
| 5️⃣ Switch back | 重复步骤 2‑3,但指向原始的 compose 文件。 |
每一步都需要你记住或复制 worktree 路径,并且还必须跟踪哪个 compose 文件对应哪个服务。
没有 概览 能显示每个服务是从哪个分支运行的。
你可以通过 shell 别名或 Makefile 来减少一些繁琐,但仍然缺少:
- 快速的可视化提示,显示哪个服务运行自哪个 worktree。
- 当出现新 worktree 时的自动更新。
Source: …
介绍 Recomposable (v1.1.4)
Recomposable 是为开发工作流打造的 Docker‑Compose TUI。
版本 1.1.4 将 worktree 切换 作为一等功能加入。
工作原理
- 在 UI 中对任意服务 按
t。 - 选择器会显示 所有可用的 Git worktree(通过
git worktree list --porcelain获取)。 - 使用
j/k移动,Enter选择。 - 该服务会 停止,从所选 worktree 的 compose 文件重新构建,随后 重新启动。
就这么简单——无需手动路径、无需额外的 docker compose -f … 参数、也不需要打开额外的终端标签页。
UI 概览
当服务来自不同分支时,会自动出现 WORKTREE 列。
非 main 分支会以黄色高亮显示。
SERVICE STATUS BUILT PORTS WORKTREE
auth-service running 2m ago 5001 fix-oauth
api-gateway running 1h ago 8080 main
web-app running 3d ago 3000 main
- 不必记住路径。
- 不必猜测容器是基于哪个分支构建的。
实现细节
- 发现 – 在 compose 文件所在目录执行
git worktree list --porcelain,以发现所有 worktree。 - 映射 – 工具会把原始 compose 文件路径映射到目标 worktree 中的相同相对路径。如果目标 worktree 中不存在该文件或服务,会显示错误。
- 覆盖存储 – 所选 worktree 的覆盖信息会按服务保存,因此 所有后续操作(
rebuild、restart、logs、exec、watch、基于依赖的级联重建)都会自动使用覆盖后的 compose 文件。 - 切回 – 再次按
t并选择原来的 worktree(通常是main)。
使用 Recomposable 的典型工作流
- 在项目根目录启动 Recomposable——完整栈在
main上运行。 - 打开 Claude Code,让它在新的 worktree 上处理
auth-service。 - Claude 完成修改后,你需要进行端到端验证。
- 在 Recomposable 中定位到
auth-service,按t,选择 Claude 的 worktree。 - 服务会从 Claude 的分支重新构建,而其余栈仍保持在
main。 - 查看日志、发送请求、验证行为——全部在 TUI 中完成。
- 完成后,再次按
t并切回main。
无需额外的终端标签页、无需路径切换、也不必猜测。
这种方式具备可扩展性:如果 Claude 在两个 worktree 上处理了三个服务,你可以一次性切换这三个服务,WORKTREE 列会立即显示每个服务当前运行的 worktree。
面向未来的功能(想法与缺口)
| 领域 | 当前状态 | 可能的改进 |
|---|---|---|
| 自动检测工作树更改 | 必须手动按下 t。 | 监视新工作树(例如 Claude 创建的工作树),并提示用户自动切换受影响的服务。 |
| 工作树感知的级联重建 | 依赖感知的重建(d)会重启传递依赖的服务,但它们仍保持在当前工作树上。 | 添加“级联切换”,当服务被切换时,同时将其依赖服务切换到相同的工作树(可选开关)。 |
| 切换前的差异预览 | 没有预览;会盲目重建。 | 在重建前显示当前 compose 文件与目标工作树之间的已更改文件/服务摘要,让用户决定是否值得切换。 |
| 分支状态指示器 | 仅显示工作树名称。 | 显示工作树所在分支相对于 main 的领先/落后情况,或是否有未提交的更改,以帮助决定使用哪个工作树进行测试。 |
| 批量操作 | 逐个切换服务。 | 允许在 UI 中选择多个服务,并一次性将它们全部切换到相同的工作树。 |
| 持久化配置文件 | 覆盖是针对单个服务且是临时的。 | 保存命名的“配置文件”(例如 Claude‑Auth),捕获一组服务到工作树的映射,可通过单个命令加载。 |
实现其中任何一项都将使该工具对高度依赖 Claude Code + worktree 模式的团队更加强大。
TL;DR(再次)
- 问题: 在多个微服务之间验证 Claude 生成的更改,需要繁琐的手动处理工作树路径。
- 解决方案: Recomposable – 一个基于 Docker‑Compose 的 TUI,允许你只需一次按键即可将任意服务切换到任意 Git 工作树,并在清晰的表格中显示每个服务当前的工作树。
- 结果: 再也不用复制粘贴路径,也不需要额外的
docker compose -f …标志,一眼即可看到每个容器运行的分支。
试一试,让 UI 为你完成繁重的工作!
# Recomposable – Multi‑service Worktree Switch
> “0 commits ahead” is a different risk profile than a change that only touches a single config file.
它的功能
Recomposable 让您可以通过一次操作,将仓库中 所有服务 从一个 Docker Compose 文件切换到相同的工作树。
当更改涉及多个服务时,您无需再逐个切换服务——摩擦感消失了。
安装
npm install -g recomposable
快速开始
-
导航到包含
docker‑compose.yml文件的目录。 -
创建一个
recomposable.json,指向您想要管理的 compose 文件。 -
运行工具:
recomposable
工作树功能可直接在任何拥有多个工作树的 Git 仓库中使用。
链接
- GitHub:
- npm:
What it does
Recomposable 让您只需一次操作,就能在同一工作树中,将仓库中的 所有服务 从一个 Docker Compose 文件切换过去。
当一次更改涉及多个服务时,您不再需要逐个切换服务——摩擦感消失。
安装
npm install -g recomposable
快速开始
-
导航 到包含
docker‑compose.yml文件的目录。 -
创建 一个指向您想要管理的 compose 文件的
recomposable.json。 -
运行 工具:
recomposable
工作树功能在任何拥有多个工作树的 Git 仓库中都能开箱即用。
链接
- GitHub:
- npm: