一个目录里放了几个仓库,提交按钮到底该操作谁

一个目录里放了几个仓库,提交按钮到底该操作谁

项目目录不一定就是仓库根目录。有时打开的是一个大文件夹,前端、后端和脚本各自有 Git;有时主仓库里还有子模块,旁边又开了 worktree。

砚原来的源代码管理主要围着一个仓库转。这轮从 alpha.14 的"发现仓库",做到 alpha.15 的"同屏管理",最费心的地方是让每个操作认准自己的仓库。

先能找到,再谈一起管理

alpha.14 先让不属于 Git 工作树的父文件夹列出两层以内的仓库。点进去,还是作为独立项目打开,复用原来的暂存、提交和历史能力。

扫描认 .git 目录,也认 linked worktree 的 .git 文件。隐藏目录、node_modules 和子目录软链接跳过,遇到仓库边界就停下来。列表定时刷新,也留了手动刷新入口;扫描失败时保留上次结果并显示错误。

这是第一步,没有把几个仓库的改动直接揉在一起。后来 alpha.15 才把它们放进同一屏的可折叠面板,每个仓库都有自己的提交框。

两份提交说明,得各存各的

A 仓库写了一半说明,切到 B 暂存一个文件,再切回来,A 的文字应该还在。

除了说明,amend 状态、树的展开情况、历史读取范围和比较起点也都有各自的归属。仓库选择器决定历史和窗口级 Git 命令操作谁;开启自动跟随后,会根据当前文件或历史 diff 选仓库。

但点击某个面板里的操作时,目标就是那个面板。不能因为焦点刚好在另一个文件上,临时把目标换掉。

菜单打开以后再切仓库,是个值得单独测的场景。确认对话框、后台 Git 结果和撤销操作,都要拿着发起时的仓库身份,不能执行时再看一眼"现在选中谁"。

相同文件名,甚至相同提交号,也不是同一份现场

两个 worktree 可以共享 Git 对象,但工作目录不同。光用公共 Git 目录认身份,会把两份现场混在一起。

比较标签和批注因此都保留仓库根目录,历史内容还带固定版本。切面板、恢复会话以后,它们仍然属于原仓库。

仓库被删掉,又在同一路径建了一个,也不能让旧确认框继续操作新对象。已经退出的仓库上下文需要失效,迟来的回调随之丢弃。

这些问题在单仓库时不容易显出来,一旦几个仓库并排,原来省掉的"属于谁"就都得补回来。

父仓库提交,别顺手保存子仓库的文件

已初始化子模块也纳入发现,未初始化的不会被误认成父仓库。文件归属按最长匹配的仓库根目录判断。

例如子仓库里还有没保存的代码,我只想提交父仓库的一处修改,提交前保存不能顺手把子仓库草稿也写到磁盘。父仓库里的 gitlink 变化仍归父仓库处理,两层要分开。

测试用了真实临时 Git 仓库去跑这些组合,包括共享对象的 worktree、子模块、独立提交说明和带着旧目标的菜单。终端版也显示同一组仓库面板,滚动以后点击改动行,仍要落到正确仓库。

界面上只是多了几个面板,背后却是把原来默认唯一的仓库,变成每一步都得说清楚的对象。以后继续补 Git 功能,这个归属不能再省。

下载试用

本文功能进入 v0.1.0-alpha.15,可以下载对应版本体验。

下载地址核对于 2026-10-19。安装包适用于 macOS 13+、Apple Silicon,目前尚未 Apple 公证,首次打开说明见发布页。


仓库留档

相关推荐
敲代码的玉米C2 小时前
想在 Markdown 预览里改两个字,最后补了一套块编辑
go
敲代码的玉米C2 小时前
不想每次都手动换 DMG,我给砚接了自动更新
go
敲代码的玉米C2 小时前
看完代码先留几条批注,再一起交给终端里的工具
go
云浪16 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
敲代码的玉米C16 小时前
并排 diff、提交标签:砚的 Git 阅读体验又补了一轮
go
敲代码的玉米C16 小时前
给编辑器补拖拽:标签挪过去,状态也得跟过去
go
敲代码的玉米C16 小时前
写到这里,砚还要继续照着 IDE 加功能吗
go
敲代码的玉米C17 小时前
把终端拖进编辑区,别把正在跑的 shell 弄丢了
go
敲代码的玉米C17 小时前
给砚加一个「所有改动」页,提交前少来回点几次
go