# Mizuki 内容迁移指南

本指南将帮助你将现有的 Mizuki 博客从单仓库模式迁移到代码内容分离模式。

> 💡 **提示**: 如果是新项目,建议先阅读 [内容分离完整指南](./CONTENT_SEPARATION.md)

## 📋 迁移前准备

### 检查清单

- [ ] **备份整个项目** (重要!)
- [ ] 确保所有更改已提交到 Git
- [ ] 了解你要使用的模式 (推荐 Submodule)
- [ ] 在 GitHub/GitLab 创建新的内容仓库

## 🚀 迁移步骤

### 步骤 1: 创建内容仓库

```bash
# 创建并进入新目录
mkdir Mizuki-Content
cd Mizuki-Content

# 初始化 Git 仓库
git init

# 创建目录结构
mkdir -p posts spec data images/albums images/diary images/posts

# 创建 README
cat > README.md << 'EOF'
# Mizuki 博客内容

这是 Mizuki 博客的内容仓库,包含所有文章、数据和图片。

## 目录结构

- `posts/` - 博客文章
- `spec/` - 特殊页面 (关于、友链等)
- `data/` - 数据文件 (番剧、项目、技能、时间线)
- `images/` - 图片资源

## 使用方法

此仓库作为 Mizuki 代码仓库的内容源,通过 Git Submodule 或独立模式关联。

详细说明请查看: https://github.com/matsuzaka-yuki/Mizuki
EOF
```

### 步骤 2: 从 Mizuki 项目复制内容

```bash
# 设置路径变量
MIZUKI_PATH="/path/to/your/Mizuki"
CONTENT_PATH="/path/to/Mizuki-Content"

# 复制文章
cp -r "$MIZUKI_PATH/src/content/posts/"* "$CONTENT_PATH/posts/"

# 复制特殊页面
cp -r "$MIZUKI_PATH/src/content/spec/"* "$CONTENT_PATH/spec/"

# 复制数据文件
cp "$MIZUKI_PATH/src/data/anime.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "anime.ts not found"
cp "$MIZUKI_PATH/src/data/projects.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "projects.ts not found"
cp "$MIZUKI_PATH/src/data/skills.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "skills.ts not found"
cp "$MIZUKI_PATH/src/data/timeline.ts" "$CONTENT_PATH/data/" 2>/dev/null || echo "timeline.ts not found"

# 复制图片
cp -r "$MIZUKI_PATH/public/images/albums/"* "$CONTENT_PATH/images/albums/" 2>/dev/null || echo "albums not found"
cp -r "$MIZUKI_PATH/public/images/diary/"* "$CONTENT_PATH/images/diary/" 2>/dev/null || echo "diary not found"

echo "✅ 内容复制完成!"
```

### 步骤 3: 提交内容仓库

```bash
cd "$CONTENT_PATH"

# 添加所有文件
git add .

# 提交
git commit -m "Initial commit: Migrate content from Mizuki monorepo"

# 添加远程仓库 (替换为你的仓库地址)
git remote add origin https://github.com/your-username/Mizuki-Content.git

# 推送
git branch -M master
git push -u origin master

echo "✅ 内容仓库已推送!"
```

### 步骤 4: 配置 Mizuki 代码仓库

```bash
cd "$MIZUKI_PATH"

# 创建 .env 文件
cp .env.example .env

# 编辑 .env 文件,启用内容分离
cat > .env << 'EOF'
# 启用内容分离
ENABLE_CONTENT_SYNC=true

# 内容仓库配置
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
USE_SUBMODULE=true
EOF

# 运行同步脚本
pnpm run sync-content

# 提交更改
git add .env.example
git commit -m "Enable content separation"
git push
```

> 📖 更多配置选项请参考 [内容分离完整指南](./CONTENT_SEPARATION.md)

### 步骤 5: 清理原仓库中的内容 (可选)

⚠️ **警告**: 只有在确认内容已成功迁移后才执行此步骤!

```bash
cd "$MIZUKI_PATH"

# 备份原内容 (以防万一)
mkdir -p ../mizuki-content-backup
cp -r src/content/posts ../mizuki-content-backup/
cp -r src/content/spec ../mizuki-content-backup/
cp -r src/data ../mizuki-content-backup/
cp -r public/images ../mizuki-content-backup/

# 删除已迁移的内容 (保留目录结构)
rm -rf src/content/posts/*
rm -rf src/content/spec/*
rm -f src/data/anime.ts src/data/projects.ts src/data/skills.ts src/data/timeline.ts
rm -rf public/images/albums/* public/images/diary/*

# 创建 .gitkeep 文件保留目录
touch src/content/posts/.gitkeep
touch src/content/spec/.gitkeep
touch public/images/albums/.gitkeep
touch public/images/diary/.gitkeep

# 提交更改
git add .
git commit -m "Remove migrated content (now in separate repository)"
git push
```

## 🧪 测试迁移

### 本地测试

```bash
cd "$MIZUKI_PATH"

# 同步内容
pnpm run sync-content

# 启动开发服务器
pnpm dev

# 访问 http://localhost:4321 检查:
# - 文章是否正常显示
# - 图片是否正确加载
# - 特殊页面是否工作
# - 数据页面是否正常 (番剧、项目等)
```

### 构建测试

```bash
# 构建项目
pnpm build

# 预览构建结果
pnpm preview

# 检查所有功能是否正常
```

## 🔄 日常工作流

### 更新内容

```bash
# 1. 在内容仓库中修改
cd "$CONTENT_PATH"
# 编辑文件...
git add .
git commit -m "Update content"
git push

# 2. 在代码仓库中同步
cd "$MIZUKI_PATH"
pnpm run sync-content
```

### 使用 Submodule 时

```bash
cd "$MIZUKI_PATH"

# 更新 submodule 到最新版本
git submodule update --remote --merge

# 或者使用同步脚本 (推荐)
pnpm run sync-content

# 提交 submodule 更新
git add content
git commit -m "Update content submodule"
git push
```

## 🚀 部署配置

迁移完成后,需要在部署平台配置环境变量:

```bash
ENABLE_CONTENT_SYNC=true
CONTENT_REPO_URL=https://github.com/your-username/Mizuki-Content.git
USE_SUBMODULE=true
```

详细的部署配置(包括私有仓库、GitHub Actions、Vercel 等)请参考 [内容分离完整指南 - CI/CD 部署](./CONTENT_SEPARATION.md#-cicd-部署)

## ⚠️ 常见问题

### Q: 同步脚本失败怎么办?

A: 检查:
1. 网络连接是否正常
2. Git 凭据是否配置正确
3. `ENABLE_CONTENT_SYNC=true` 是否已设置
4. `CONTENT_REPO_URL` 是否正确
5. 是否有足够的磁盘空间

运行 `pnpm run check-env` 检查配置。

### Q: 符号链接在 Windows 上不工作?

A: 需要以管理员身份运行,或者脚本会自动切换到复制模式。

### Q: 如何回滚到单仓库模式?

A: 在 `.env` 中设置 `ENABLE_CONTENT_SYNC=false`,然后从备份或内容仓库复制内容回本地。

### Q: 遇到私有仓库认证问题?

A: 参考 [内容分离完整指南 - 私有仓库配置](./CONTENT_SEPARATION.md#-私有仓库配置)

## 📚 参考文档

- [内容分离完整指南](./CONTENT_SEPARATION.md) - 详细配置说明
- [内容仓库结构说明](./CONTENT_REPOSITORY.md) - 推荐的仓库结构
- [Git Submodule 文档](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97)

---

💡 **提示**: 迁移前建议先在测试环境中验证整个流程!
