Repository navigation
Issue 128
clean edited this page Sep 29, 2026
·
1 revision
- 类型:缺陷修复
- 状态:已实现,待 PR 审阅
- Issue:https://github.com/ShaoClean/Alune/issues/128
- 初始修复:https://github.com/ShaoClean/Alune/pull/129 (已合并)
- 补充 PR:https://github.com/ShaoClean/Alune/pull/131
- 最近更新:2026-09-30
- 原始基线:
badbd0e3311a601bee7f99f0a68d64a9f0fc6f32(v0.5.1) - 本次代码:
89afddcfcc4aea10641888f366aafb17245a8653,基于development @ 547e3f3
v0.5.1 的分支选择器把完整远程引用传到服务端,服务端执行 git switch --detach。选择 remotes/origin/feature/demo 后进入游离 HEAD,没有本地分支或 upstream。
PR #129 已实现创建/复用本地跟踪分支及共用冲突交互。本次补充处理其余边界:名称为 remotes/origin/feature/demo 的本地分支和真正的远程引用不能靠名称前缀区分;分支列表需返回准确类型与 upstream,才能保留用户选择的分组。
工具条和分支面板选择远程分支时,复用对应本地跟踪分支,或者创建并切换到本地分支。同名冲突由用户选择现有分支、换名创建或取消。保留工作区内容和已有上游,不强制切换。
沿用手动“获取”;本次不增加自动 fetch,也不增加显式游离 HEAD 检出入口。没有数据库迁移。
- 分支列表使用
for-each-ref的完整 ref、HEAD、upstream 和 symref 信息,区分refs/heads/与refs/remotes/,跳过符号引用。面板可显示真实 upstream。 - 切换 HTTP 请求保留
name、localName,增加可选isRemote。两个 UI 入口明确传递类型;旧调用未传类型时仍优先识别已存在的字面本地分支。 - 服务端按完整 upstream 匹配本地跟踪分支;有多个匹配时优先当前分支。远程名称从配置读取并按最长前缀匹配,支持包含斜杠的 remote。
- 本地切换使用
git switch --no-guess -- <name>,失效本地选择不会触发其他 remote 的自动推断。远程创建使用git switch --track -c <local> -- <full-ref>,避免依赖较新的--track=direct写法。 - 拒绝失效 ref、远程 HEAD 符号引用和无效新分支名。存在同名且未跟踪所选远程的本地分支时,保留
LOCAL_BRANCH_EXISTS冲突码;不重写分支或上游。 - 沿用 #129 的共用交互和刷新行为,保留
branch/stdout响应。选择现有分支时显式传递本地类型;换名创建继续保留原 remote。
- 两个入口为仅远程存在的分支创建本地跟踪分支,HEAD 不游离。
- 复用已有跟踪分支,重复选择不会重复创建。
- 同名冲突提供三种选择,保持原分支和跟踪关系。
- 多 remote 同名及包含斜杠的 remote 按实际选择处理。
-
origin/literal、remotes/origin/...本地字面名称与远程引用分别处理。 - 工作区覆盖冲突、失效引用及执行失败保留文件、索引和原分支。
- 临时本地仓库和真实回环 SSH 通道回归通过。
- 保留 #129 对
local-git.spec.ts游离断言的修正,并补充回归测试。
见 Issue-128-Validation,包含命令、环境、前后截图、回环 SSH 范围及未验证项。
实际测试 Git 为 2.43.1,旧 Git 尚未安装验证。Windows / Linux 的桌面界面、外部 SSH 主机和非回环网络未手工验证;自动测试和本地回环结果不能替代这些环境。保留 Git 对已修改文件和其他 worktree 占用分支的保护。
可通过回退本次代码提交恢复 #129 的实现;Wiki 独立维护,回退时另行标注历史。
设计文档首页 · Alune 品牌说明 · 维护约定 · 代码仓库