多分支并行开发不再切换上下文:Muxy的Git Worktree管理完全指南
【免费下载链接】muxyLightweight and Memory efficient terminal for Mac built with SwiftUI and libghostty项目地址: https://gitcode.com/gh_mirrors/muxy1/muxy
如果你经常需要在多个分支之间反复git checkout,Muxy 的 Git Worktree 管理功能可以帮你彻底告别这种低效操作。Muxy 是一款基于 SwiftUI 和 libghostty 构建的轻量级 macOS 终端,它将 Git Worktree 做成了一等公民:在侧边栏直接创建、切换、管理多分支工作副本,配合路径模板和生命周期钩子,让并行开发变得异常顺滑 🚀
为什么需要 Git Worktree?
传统的工作流是:一个仓库、一个工作目录,换分支就要git checkout,未提交的改动还得先 stash。而Git Worktree允许同一个仓库同时检出多个分支到不同的目录,每个目录有独立的文件树,却共享同一个.git对象库。
用 Muxy 管理 Worktree 后,你的典型工作流会变成:
- 📁 每个分支一个独立目录,互不干扰
- 🖥️ 每个 Worktree 拥有自己的一套终端标签页和工作区
- ⚡ 在侧边栏一键切换分支上下文,无需 stash、无需重开项目
在侧边栏中管理 Worktree
Muxy 把 Worktree 作为与项目同级的概念展示在侧边栏中:
- 打开侧边栏(
⌘B或View → Toggle Sidebar) - 在项目行上操作,创建新的 Worktree,或点击已有 Worktree 切换上下文
- 每个 Worktree 会显示分支名、路径和活跃状态,主工作区(primary worktree)不可被移除
侧边栏布局还内置了专门的分组选项。在Settings → Appearance → Sidebar中选择Tab Focused或Agents Focused布局后,会出现Nest worktrees inside projects(将 Worktree 嵌套在项目内)的开关,默认关闭。开启后所有 Worktree 会收纳到对应项目之下,目录结构更清晰。
这些行为由 WorktreeStore.swift 和 GitWorktreeService.swift 实现,数据模型定义在 Worktree.swift 中。
一键创建 Worktree:模板与目录
Muxy 允许你在Settings → Projects → Worktrees中设置默认落盘方式,支持两种模式:
1. 路径模板(Template)
模板必须包含{branch},还可以使用:
| 变量 | 含义 |
|---|---|
{branch} | 分支名,路径分隔符会被自动替换 |
{project-name} | Muxy 中显示的项目名 |
{base-dir} | 当前检出目录名 |
相对路径从项目目录开始解析。例如项目在/code/my-app,分支为feature/auth,模板../{base-dir}.{branch}会解析为/code/my-app.feature-auth。
2. 固定目录(Folder)
全局目录会把 Worktree 存到<folder>/<project-name>/<worktree-name>;而在新建 Worktree 对话框中单独选择的目录则存到<folder>/<worktree-name>。项目级设置始终优先于全局设置。
完整说明见 docs/user-guide/settings.md 的Worktree path templates一节。
用 Muxy CLI 脚本化操作 Worktree
除了图形界面,Muxy 还提供命令行工具,方便脚本化和远程操作。安装方式:菜单Muxy → Install CLI,会在/usr/local/bin写入muxy包装脚本。常用命令:
# 列出当前项目的全部 worktree muxy list-worktrees "My App" # 按分支名 / 名称 / 路径 / ID 切换 muxy switch-worktree feature/login # 创建并切换到新 worktree(默认新建同名分支) muxy create-worktree login --branch feature/login --base main # 检出已有分支 muxy create-worktree hotfix --existing --branch release/1.2 # 从 Git 刷新 worktree 列表 muxy refresh-worktrees所有命令都支持--project和--worktree参数来指定目标,split-right、new-tab等窗口命令也能直接作用于其他 Worktree 的工作区,做到"人在此处、操作在那"。详细文档见 docs/features/muxy-cli.md。
生命周期钩子:自动装依赖、清理环境
每个 Worktree 的依赖安装和清理可以完全自动化。在项目根目录的.muxy/worktree.json中声明 setup / teardown 命令(项目级),或写在~/.config/muxy/worktree.json(本机级,跨项目共享):
{ "setup": [ "docker compose up -d", { "name": "Install dependencies", "command": "pnpm install" } ], "teardown": [ "docker compose down" ] }机制要点:
- ⚙️创建时:setup 命令在 Worktree 创建并注册后执行,且需要你在新建对话框中显式勾选启用;一条命令失败会停止后续 setup,但不会回滚已创建的 Worktree
- 🧹删除前:teardown 按"项目级 → 本机级"的逆序执行;若删除时检测到未提交改动,会拒绝移除,保证你的代码不丢
- 每条命令都以 Worktree 目录为工作目录运行,并注入
MUXY_PROJECT_PATH、MUXY_WORKTREE_BRANCH等环境变量 - 远程或外部托管的 Worktree 不执行本地钩子
安全删除与清理
删除 Worktree 时,Muxy 会先检查未提交改动:存在改动则阻止删除;确认对话框中会列出全部 teardown 命令,你批准的是"当前显示的命令",若配置文件在执行前被改动,删除会中止。相关实现可参考 WorktreeTeardownRunner.swift。
对于侧边栏中积累的"僵尸" Worktree,还可以用muxy refresh-worktrees从 Git 侧同步真实状态,自动清理已失效的条目。
进阶:扩展 API 中的 Worktree
Muxy 的扩展系统也完整开放了 Git Worktree 能力,docs/extensions/git.md 中列出了worktree.add、worktree.remove、worktree.switchTo等方法,与 App 侧边栏和移动端共用同一个 Git 内核,因此任何一侧的改动都会实时反映到另一侧。
常见问题速查 📌
| 问题 | 处理方式 |
|---|---|
| Worktree 不显示 | 确认项目开启了 Worktree 展示(worktreesEnabled);用muxy refresh-worktrees刷新 |
| 删除被拒绝 | 先提交或暂存改动;检查 teardown 钩子是否报错 |
| 想调整目录结构 | 修改Settings → Projects → Worktrees的路径模板 |
| Worktree 内终端空白 | 参考 docs/user-guide/troubleshooting.md 的终端排查章节 |
总结
Muxy 把 Git Worktree 的完整生命周期——创建、定位、切换、自动化配置、安全删除——都收敛进了侧边栏、设置面板和 CLI 三套入口,多分支并行开发不再意味着反复切换上下文。从 docs/user-guide/settings.md 入手配置你的第一个路径模板,再用一条muxy create-worktree命令体验并行开发的效率提升,只需要几分钟 ⏱️
【免费下载链接】muxyLightweight and Memory efficient terminal for Mac built with SwiftUI and libghostty项目地址: https://gitcode.com/gh_mirrors/muxy1/muxy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考