Skip to content

fix(archive): 未追踪 change 目录归档不再 pathspec fatal - #33

Merged
stack-wuh merged 1 commit into
mainfrom
fix/archive-untracked-change-dir
Sep 29, 2026
Merged

stack-wuh merged 1 commit into
mainfrom
fix/archive-untracked-change-dir

Conversation

@stack-wuh

Copy link
Copy Markdown
Owner

现场复现

在 x.wuh.site 仓库对从未入 commit 的 change 目录执行 archive execute:目录被移动、INDEX 已重建,随后 CLI 在收尾 git add 处 fatal:

fatal: pathspec 'shadow-docs/changes/<name>' did not match any files

归档卡在半落状态(旧路径已移走、新路径未追踪、commit 未落),只能人工补提交。

根因

lib/domains/archive.mjs 的 execute 在 renameSync 之后无条件 git add 旧路径。旧目录被追踪时该 add 负责暂存删除(必要);但 change 目录从未被追踪时(本例:release 文件清单遗漏了 change 目录本身),旧路径既不存在也无索引条目,pathspec 直接 fatal。

修复

renameSync 前用 git ls-files -- <old> 探测旧目录是否被追踪,仅追踪时才把旧路径加入暂存表;未追踪时只暂存 INDEX.md 与 archive 新路径。被追踪场景行为不变(原用例继续通过)。

测试

  • 新增回归用例:未追踪 change 目录的 archive execute 必须落本地 commit、树干净、brief 落入 archive
  • 定向验证:--test-name-pattern "archive execute" 下两用例均过
  • 备注:全量套件在维护者高负载机器上存在与本 PR 无关的随机失败(干净基线也随机挂 4–11/66,失败集合每次不同;已取证 node SIGSEGV 崩溃报告,见 ~/Library/Logs/DiagnosticReports/node-*.ips),建议 CI 环境复核

archive execute 在移动目录后无条件 git add 旧路径;当 change 目录从未入
commit(如 release 文件清单遗漏了 change 目录本身)时,旧路径无物可加,
pathspec fatal 把归档卡在半落状态(目录已移走、INDEX 已重建、commit 未落)。

修复:rename 前用 git ls-files 探测旧目录是否被追踪,仅追踪时才把旧路径
加入暂存表;未追踪时只暂存 INDEX 与 archive 新路径。附未追踪场景回归测试。
@stack-wuh
stack-wuh merged commit e9460be into main Sep 29, 2026
0 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant