畸形工作树注册移除¶
当管理用 gitdir 反向链接错误地以 .git/.git 结尾时,Git 可能会在 <checkout>/.git 报告一个链接工作树。这会复现 #17316 的验证错误。该复现只确认存在畸形注册,而不确认是哪个程序创建了它;当前 OMP 使用普通的 git worktree add。
Orca 的桌面端和运行时移除入口在以下情况下使用仅注册恢复:Git 明确将该行标记为可修剪,该行具有具名本地分支和 HEAD,它既不是 main 也不是锁定状态,并且执行文件系统确认所选 .git 路径是一个常规文件。缺失或未知证据不允许此恢复。符号链接或目录不构成常规文件证明。
恢复会复用 git worktree prune,随后执行严格的工作树列表,必须确认所选注册已消失。它不会删除所选文件、推断父路径用于删除,或删除分支。由于所选行不是检出,因此跳过归档钩子和检出清理。
两个后果是有意为之:
- Git 的 prune 还会清除仓库中其他过期的、未锁定的注册;它不是路径范围命令。存活和锁定的注册仍由 Git 负责,Orca 会验证所请求的注册已消失。
- 存活检出的
.git文件指向已移除的管理元数据。文件及其具名分支会被保留;恢复会移除损坏的导航条目,并且不会修复或声称恢复该检出。
Native 和 WSL 检查使用现有的执行文件系统访问器。WSL 的 prune 和验证使用同一所选发行版。配对运行时在其所属主机上运行恢复。直接 SSH 不进入此本地恢复:其当前提供程序没有仅注册移除操作,且失败的远程移除永远不会授权本地回退。
这些 Git 命令已存在于 2.25 兼容的清理路径中。在无法明确证明此文件形态注册为可修剪的旧版 Git 上,Orca 会拒绝此恢复。延迟删除会独立拒绝非目录和符号链接目标,因此 force 无法将 .git 文件移入删除回收站。
回归覆盖位于 worktree-prunable-git-file.test.ts、worktrees-removal-recovery.test.ts 和 worktree-deferred-removal-real-git.test.ts。后者针对已安装的 Git 二进制文件,在一个一次性仓库中复现确切的畸形,并检查存活文件内容、分支 HEAD 和已移除的注册。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca