Repository navigation
[Bug] create_worktree 在 git < 2.42 的机器上完全不可用(--no-lazy-fetch 需 git ≥ 2.42,附根因与修复补丁) #9676
Closed
columforge
started this conversation in
General
Replies: 1 comment
|
tag: dsh-v0.2.1-alpha.3 处,问题已经修复。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
现象
在 git 版本 < 2.42 的机器上(实测 Ubuntu/git 2.34.1),
create_worktree工具 100% 失败,第一步就报:agent 的 worktree 协作流(create_worktree → 进 worktree 开发 → 合回)在该机器上完全不可用;退路只剩手敲原生
git worktree。根因
packages/experimental/worktree/src/index.ts的createCheckout把--no-lazy-fetch无条件前置到每一条 git 命令:而
--no-lazy-fetch是 git 2.42 才加入worktree add的选项(2.34 连全局参数解析都不认识),于是任何 git < 2.42 的环境整条命令直接被拒。修复思路(已实现并实测,diff 附后)
git --version,≥ 2.42 才发 flag。≥ 2.42 上命令序列与改动前逐字节一致。check-ref-format先行——不可用的 git 仍在任何分配发生前暴露,sandbox 拒绝场景的「confine 恰好一次 / 零 spawn」断言在所有 git 版本上保持成立。extensions.partialClone时,直接拒绝创建并说明原因——否则reset --hard物化文件时会静默懒取回缺失 blob,破坏本服务 no-fetch 的契约。宁可拒绝,不静默违反。验证(git 2.34.1 实测)
pnpm vitest run packages/experimental/worktree:改动前 28 failed / 5 passed → 改动后 4 failed / 29 passed。tsc --noEmit通过;真实 create_worktree 全链(建 → 进 → 合回 → 清理)实测通过。补丁
环境信息:Linux x64,git 2.34.1,dsh 当前 master(
d743267388附近)。All reactions