SuperAPI AI 工具集

worktree-switching

编程与开发

查看项目

更新于 10-16 06:45

技能介绍

用途:为 sidecar 提供 Git worktree 支持,包括检测、切换、状态管理与插件重新初始化。

主要能力:切换时按顺序保存旧 WorkDir 的激活插件、更新 WorkDir、应用对应主题、调用 registry.Reinit(newWorkDir) 停止并重新初始化全部插件、发送 WindowSizeMsg 重算布局、恢复新 WorkDir 的激活插件并弹出提示。每个 worktree 的激活插件、侧栏选择等状态按绝对 WorkDir 路径保存在 ~/.config/sidecar/state.json。外部删除 worktree 时可回退到主仓库。

使用方式:核心调用为 m.switchProject(worktreePath)。Registry.Reinit(newWorkDir) 按逆序停止插件、更新 ctx.WorkDir、逐个 reinit 并返回启动命令。插件需在 Stop() 释放资源(watcher、goroutine、channel),在 Init(ctx) 重置状态并读取新 WorkDir,在 Start() 启动新的异步工作;Update 中处理 tea.WindowSizeMsg。状态使用 internal/state 的 Get/Set 按 WorkDir 读写。检测删除的模式:定义 WorkDirDeletedMsg,在刷新命令中 os.Stat 失败后寻找主仓库路径,再用 app.SwitchToMainWorktree(mainPath) 回退。相关命令:SwitchWorktreeMsg、SwitchWorktree、SwitchToMainWorktreeMsg、SwitchToMainWorktree。Git 辅助函数包括 GetWorktrees、GetMainWorktreePath、WorktreeNameForPath、GetAllRelatedPaths。

适用场景:sidecar 多 worktree 开发流程中的项目切换与插件适配。

限制与最佳实践:Init() 中重置全部状态;Stop() 用 sync.Once 防重复关闭;操作前校验 WorkDir 存在;命令创建时记录 WorkDir,闭包可能在切换后执行;Start() 保持非阻塞。测试可执行 git worktree add ../my-feature feature-branch 后切换、验证重新初始化、外部删除后刷新确认回退。