Skip to content

两个独立克隆的仓库共享同一 project_id,Desktop 只能打开一个 #31491

Description

@GershonWang

描述

将 git 仓库完整复制到另一路径后,Desktop 无法独立打开副本——两个路径共享同一
project_id,UI 始终只显示原路径的项目。

复现步骤

  1. 在 /path/A/repo 正常使用 Desktop
  2. cp -r /path/A/repo /path/B/repo
  3. 用 Desktop 打开 /path/B/repo
  4. Desktop 始终显示 /path/A/repo,副本无法独立访问

环境

  • OpenCode Desktop: v1.16.2
  • OS: Linux
  • Git: 普通仓库(非 worktree),190 commits

数据库证据

project 表只有一个条目:
id=c63a95a... worktree=/path/A/repo vcs=git

project_directory 表有两个条目:
c63a95a... | /path/A/repo | main
c63a95a... | /path/B/repo | root

Desktop 全局状态 (opencode.global.dat) 中 server.projects.local 只有 /path/A/repo。

两个仓库的 .git/opencode 文件内容完全相同(均为 legacy 40-hex 格式)。

调查

已尝试以下方案,均被 Desktop 覆盖:

方案 结果
删除 .git/opencode 后重启 Desktop 重新生成为相同旧 hash
写入随机 UUID 到 .git/opencode 重启后被覆盖为旧 hash
git replace --graft 改变根 commit Desktop 内部 git 库不认 replace ref
直接修改 opencode.db + opencode.global.dat 重启后被抹掉

根因:Desktop v1.16.2 仍从 git root commit hash 计算 project_id,不尊重
git replace refs,且启动时会覆盖 .git/opencode、project_directory 和
global state。

与现有 issue 的关系

#14287 已将 project_id 从 legacy 40-hex 迁移为 per-clone UUID,但该修复
在 v1.16.2 中未生效——两个独立副本的 .git/opencode 仍被计算为相同的
legacy hash,且迁移逻辑没有处理"缓存文件是从另一个副本复制来的"场景。

临时解决方法

无。(唯一能绕过的方案是修改 git 历史,不适用。)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions