用 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