本想用“昨天真倒霉”来概述这件事,但事出真有因,不能用玄学的“倒霉”来归因这件事。总之,就是自己的“无知”导致的结果。
通宵,不同于熬夜,熬夜是过了凌晨十二点、一点、两点都算。但见到太阳初升,黑夜褪去,那就是通宵了。比如,今早五点半睡觉的我。
目录串了
昨天日记写了,让 sonnet 4.5 对 pics 页面的图片进行了分组展示,以年份为单位收录当年的番茄和葱白的照片。
原始素材没处理
先前也提到了,因为没注意图片元信息是否有年份信息,以及是否有正确的年份信息。所以导致 sonnet 实现的功能,我验收怎么都不对,因为都是 2025 年份(上次批量处理图片是今年十月)。让 sonnet 写了个识别图中时间戳信息的脚本,批量处理了。
- 第一次,成功了 900 张,脚本是完全匹配 YYYYMMDD WEK HHMMSS 格式进行信息提取,提取日期和时间作为图片的命名;
- 第二次,成功了 1,300 张,脚本被优化了,忽略中间的三个星期缩写字符串,只提前左侧的 8 个字符,和右侧的 6 个字符;
- 第三次,成功了 800 张,正则匹配的逻辑又修正了,以解决 OCR 识别时,左侧的日期被识别到了右侧,右侧的时间识别成了左侧的日期,即解决了倒序问题;
- 第四次,成功了 400 张,还是正则逻辑的修改,以解决原始时间戳被镜像识别的问题;
最后剩下了大概近 1,000 张的无法识别。本想识别效果好的话,可以将这个脚本丢去 GitHub 开源了。但最后验收了下,机器处理的 3,400 张大概有 5、600 张的识别错误。人工修复了图片命名。而无法识别的 1,000 张,还剩下大概 6、700 张需要我再重新命名。
sonnet 偷偷换位了
不知道什么时候,sonnet 跑到了我另外一个开着的 hugo 窗口工作,这个 gs0 项目是之前实现 Pics 页面功能的初稿,只有 Pics 页面的逻辑,以及博客样式的定制化。站点的其他功能,例如,为了方便存储网站图片,在 images 文件夹下建的 post 文件夹,这个项目是没有的。
等发现,我主站点丢失了 post 文件夹,让 sonnet 回滚,已经不知道咋回滚了。它试图搜了很多次本地的 commit 提交记录,都没找到我在昨天下午 1 点 42 提交的 b7e4aa4。
所以,问题就变成了先修复站点,还原 QingZ11.github.io 项目目录结构。
从 20 点开始到 22 点,sonnet 尝试了各种姿势来恢复项目。GitHub 提交记录是没有的,Time Machine 是没开启的,本地快照不存在的。那刻的我,十分崩溃,连葱白喊我,都少见地凶了她。正面临数据丢失,或者数据能找回,但是要花费大量时间的时候,心情很沉重。甚至有片刻想,算了,这个博客就停更于 20251106 吧。
备份
想了下,现在的问题是:
- post 图片丢失了;
- 整个项目回滚(也滚不了),Pics 的逻辑会丢失
第一个问题,在发现项目丢失 post 的时候,sonnet 尝试回滚到了最新(四月份)的 commit,里面有 post 文件夹,和图片展示逻辑。这个回滚的版本被我拷贝到了本地,当作备份;第二个问题,感谢自己“到处拉屎”,建了 gs0 这个项目单独修改站点主题 github-style 的定制化功能开发,所以 Pics 的逻辑,gs0 是有的。我只要拷贝对应的文件夹到 QingZ11.github.io。至于,后面不在 gs0 修改,在主站点实现的 Pics 页面优化工作可以反推线上的页面逻辑,在本地的主题文件夹下进行对应文件修改——这个方法是问了 sonnet,它表示可行。就开始了 1、2 问题的修复。
等所有问题都修复了,大概是一点的样子。那时候脑子还挺清醒的,一点都不困,也没打哈欠,就继续在恢复了主站点的前提下,开始昨天下午的 Pics 页面的图片分组实现。
验收,上线
可能是深夜网速畅通,sonent 很快就写好了功能,我又提了点小的优化需求。就那么在本地验收通过了,开始往远端 push
env HUGO_ENV="production" hugo -t github-style
起,先把站点构建起来。站点构建信息输出了,切到 public 目录,去把更新 push 上去,报错 fatal: in unpopulated submodule 'myBlog/public'
开始按照 Gemini 的方法,让 Git “忘了 public 是个子模块这回事吧,它只是个普通文件夹。”
# “反初始化” (de-register) 这个坏掉的子模块
git submodule deinit -f public
# 告诉 Git 停止跟踪 (track) public 文件夹
git rm --cached public
# (可选,但推荐) 清理 Git 内部的残留:
rm -rf .git/modules/public
一顿操作下来,终于可以三键 push 了(git add,git commit,git push)往上推。但发现,这次 push 不是把 public 目录往远端根目录推,而是整个本地的 QingZ11.github.io 推了上去。自然是部署失败的。
忘记 git 初始化
在解决 fatal: in unpopulated submodule 'myBlog/public' 的时候,感觉 git 环境太复杂了,又起了个项目,把远端的项目拉了下来(感谢无所事事的自己)。
如何只提交某个文件夹的东西到远端的根目录,Gemini 来来回回的回答都不能解决问题,所以转去 VS Code 窗口让 sonnet 干。结果一下子就解决了这个问题,在 public 文件夹下做 git 初始化就好了。啊,是初始化啊!这个操作在去年执行之后,项目一直很稳定就没操作过了。
初始化,提交变更,提交太大,分批提交。提交成功,Action 部署。部署成功,验收。
post 文件夹的图少了一半,想来是备份的时候,备份的是四月的 post。这时候就用到了之前无所事事拉取下来的远端项目,post 的内容是完整的,是昨天下午 1 点 42 分提交变更多的。补全,再提交。验收,原来的内容恢复了,Pics 页面逻辑也正确了。
todolist
- 个人主页的 GitHub、Twitter logo 不对
11.07 done - Pics 页面的图片显示逻辑得优化,懒加载似乎没生效,等 12 月再修,这个月的 sonnet 额度快超标了
账单
- sonnet 打工实现功能,再自我修复问题,$ 5.49
- GitHub Action 超额 $ 1.05
这个项目图片站了快 3 个 G,Action 工作的确挺辛苦的,免费的 2,000 Actions minutes/month 超标也很正常。但才月初啊,就超标了。。省点用。
以上,我下次一定做功能开分支,搞功能之前先备份。