Repository navigation
GitMate 1.14.0
支持一个目录下的多个仓库。
症状
工作区根目录常常只是"一堆项目的容器" —— 它自己不是仓库,下面有 alpha/、beta/。这种目录下"是不是仓库"对每一个项目都答"不是",于是面板只会提示初始化,看不见下面已经有的仓库。
现在
打开这样的目录,面板会先找仓库:限深 3 层、跳过 node_modules / vendor / dist / build 等、最多 40 个,列出名字和相对路径让你选。选中之后整个面板就操作那一个 —— 状态、提交、分支、历史、忽略规则、AI 审阅全部一起跟随。
顶部会出现一个仓库标签,点它回到列表。
几个刻意的地方:
| 情况 | 行为 |
|---|---|
| 根目录本身就是仓库 | 只列出它自己,不把里面的子模块当成可选项 |
.git 是文件(worktree / 子模块指针) |
也算一个仓库根 |
| 找到仓库后 | 不再往下钻 |
| 根目录下一个仓库都没有 | 才显示原来的初始化卡片(多一个"在根目录新建"的次要选项) |
安全边界
请求可以带 repo 指定用哪个仓库,但只接受会话目录之内的路径:
/etc→ 忽略,回落到会话目录../..爬出去 → 忽略,回落到会话目录
这两条有测试。工具体也一样 —— Agent 传一个子目录,git rev-parse 自己会找到仓库根。
验证
node test/smoke.mjs # 634 项断言新增 15 项:发现(worktree 指针 / 跳过规则 / 深度边界 / 根目录是仓库时只列自己)、路由列出、根目录不是仓库、指定一个后按它作答、外面的路径和爬出去的路径被忽略、以及一次真实操作确实落在选中的仓库里。渲染守卫也新增了"多个仓库"这条界面路径,断言屏幕上出现的是仓库名字而不是"这里还不是仓库"。
顺带修的测试缺陷
渲染测试原本用硬编码的下标取面板的状态槽 —— 这次插入两个 state 就让所有下标指错了槽位,而测试只是"没抛错"。现在改成按名字取(slotOf),名字写错会直接抛。