用 Submodule 分离内容与代码
为什么分离
个人站点里,代码(布局、组件、样式)和内容(博客、笔记)的更新频率与可见性不同:
- 代码可以公开,接受 Star / PR
- 内容可能含私人记录,希望私有
- 内容更新频繁,不希望污染代码仓库的提交历史
拆分方案
把 src/content/ 整体迁移到独立私有仓库 dataInMySite,再以 submodule 挂回原位置:
git submodule add https://github.com/Polarisyo/dataInMySite.git src/content
Astro 的 content.config.ts 留在主仓库,glob loader 的 base: './src/content/notes' 路径不变,submodule 挂载点正好对齐,零代码改动。
日常提交流程
内容与代码分属两个仓库,需分别提交:
# 1. 内容仓库提交
git -C src/content add .
git -C src/content commit -m "post: 新笔记"
git -C src/content push
# 2. 主仓库更新 submodule 指针
git add src/content
git commit -m "chore: bump content submodule"
git push
克隆与部署
新机器克隆主仓库时需带上 submodule:
git clone --recurse-submodules https://github.com/Polarisyo/my-site.git
已克隆的项目补拉:
git submodule update --init --recursive
CI / 部署平台(Cloudflare、Vercel)需在构建前确保 submodule 被检出,否则 src/content 为空,页面会无内容。
小结
| 仓库 | 可见性 | 内容 |
|---|---|---|
my-site |
公开 | 代码、布局、Schema |
dataInMySite |
私有 | blog / notes / projects 的 Markdown |
这种结构让公开仓库保持干净,私人内容独立版本管理,是个人数字花园的常见实践。 试试teststst