# 版本发布手册

> 项目：u-desk
> 最后更新：2026-02-04

## 目的

规范版本发布流程，确保版本号一致性和发布质量。

## 发布前准备

### 1. 版本迭代信息核对

在更新版本号之前，先核对自上一个版本以来的所有变更。

#### 1.1 查看现有版本标签

```bash
# 列出所有版本标签
git tag -l

# 查看最新标签
git describe --tags --abbrev=0
```

#### 1.2 分析版本间差异

```bash
# 查看上一个版本到当前的所有提交
git log v0.2.0..HEAD --oneline

# 查看提交标题（用于生成发布说明）
git log v0.2.0..HEAD --pretty=format:"%s" --no-merges

# 查看变更统计
git diff v0.2.0..HEAD --stat

# 查看总体变更行数
git diff v0.2.0..HEAD --stat | tail -1
```

**输出示例**：
```
a5d3068 重构：文件系统模块化架构，增强 Markdown 渲染
eb2cbad 优化：代码质量提升，修复重复逻辑和语法高亮支持

130 files changed, 11636 insertions(+), 12233 deletions(-)
```

#### 1.3 查看详细变更

```bash
# 查看具体文件变更
git diff v0.2.0..HEAD --name-only

# 查看新增文件
git diff v0.2.0..HEAD --name-only --diff-filter=A

# 查看删除文件
git diff v0.2.0..HEAD --name-only --diff-filter=D

# 查看修改文件
git diff v0.2.0..HEAD --name-only --diff-filter=M
```

#### 1.4 生成版本发布说明

根据上述分析，创建版本发布说明文档：

```bash
# 创建发布说明文档
mkdir -p docs/项目管理/版本发布
vim "docs/项目管理/版本发布/v0.2.1-发布说明.md"
```

**发布说明模板**：

```markdown
# 版本发布说明 v0.2.1

**发布日期**：YYYY-MM-DD
**Git 标签**：v0.2.1
**上一个版本**：v0.2.0

## 变更统计

- **文件变更**：X 个文件
- **代码行数**：+X / -X
- **提交次数**：X 次

## 主要更新

### 🎯 核心功能
- 功能点1
- 功能点2

### 🔧 技术改进
- 改进点1
- 改进点2

### 🐛 问题修复
- 修复1
- 修复2

## 升级指南
...（略）

## 已知问题
...（略）
```

### 2. 功能检查清单

- [ ] 所有计划功能已实现
- [ ] 核心功能测试通过
- [ ] 关键 bug 已修复
- [ ] 代码已通过 review

### 3. 版本号确定

版本号遵循语义化版本规范（Semantic Versioning）：`主版本.次版本.修订号`

- **主版本**：不兼容的 API 修改
- **次版本**：向下兼容的功能性新增
- **修订号**：向下兼容的问题修正

## 发布流程

### 步骤 1：更新代码版本号

#### 1.1 更新 `wails.json`

```bash
# 文件位置：项目根目录/wails.json
# 修改 version 字段
```

**示例**：
```json
{
  "name": "u-desk",
  "version": "0.2.1",  // 修改此处
  ...
}
```

#### 1.2 更新 `internal/service/version.go`

```bash
# 文件位置：internal/service/version.go
# 修改 AppVersion 常量
```

**示例**：
```go
// AppVersion 应用版本号（发布时直接修改此处）
const AppVersion = "0.2.1"  // 修改此处
```

### 步骤 2：更新文档版本号

需要更新以下文档中的版本引用：

```bash
# 批量替换（使用 sed 或手动修改）
docs/功能清单.md
docs/功能清单核对报告.md
docs/时间修正记录.md
docs/项目管理/PROJECT_STATUS.md
docs/项目管理/README.md
```

**替换内容**：
- `v0.2.0` → `v0.2.1`

### 步骤 3：代码检查

```bash
# 检查是否有未提交的更改
git status

# 确认所有文件已正确更新
git diff
```

### 步骤 4：提交版本更改

```bash
# 添加所有更改
git add -A

# 提交（使用明确的提交信息）
git commit -m "发布：版本 0.2.1"
```

**提交信息格式**：
```
发布：版本 x.y.z

- 主要变更点1
- 主要变更点2
- 主要变更点3
```

### 步骤 5：创建版本标签

```bash
# 创建带注释的标签
git tag -a v0.2.1 -m "版本 0.2.1

主要更新：
- 文件系统模块化架构
- Markdown Mermaid 图表支持
- 代码语法高亮
- 主题适配优化"
```

### 步骤 6：验证标签

```bash
# 查看所有标签
git tag -l

# 查看标签详情
git show v0.2.1
```

### 步骤 7：推送到远程（可选）

```bash
# 推送提交
git push origin main

# 推送标签
git push origin v0.2.1
```

## 版本发布后

### 1. 保存版本发布说明

将步骤 1.4 中创建的版本发布说明文档提交到仓库：

```bash
# 检查发布说明文档
git add "docs/项目管理/版本发布/v0.2.1-发布说明.md"

# 单独提交发布说明
git commit -m "文档：版本 0.2.1 发布说明"
```

或者在提交版本更改时一起提交（推荐）：

```bash
# 步骤 4 中一起提交
git add -A
git commit -m "发布：版本 0.2.1

- 包含版本发布说明文档
- 代码版本号已更新
- 文档版本号已更新"
```

### 2. 更新 CHANGELOG

创建或更新 `CHANGELOG.md`，记录本版本的变更：

```markdown
## [0.2.1] - 2026-02-04

### 新增
- Markdown Mermaid 图表渲染支持
- 180+ 编程语言语法高亮
- 文件系统模块化架构

### 修复
- 编辑/预览模式切换时 Mermaid 渲染问题
- 亮色/暗色模式主题适配

### 优化
- 代码结构优化，使用 CSS 变量管理主题色
```

### 3. 构建发布版本

```bash
# Wails 构建
wails build

# 构建产物位置
# Windows: build/bin/u-desk.exe
```

### 4. 测试发布版本

- [ ] 安装测试
- [ ] 核心功能验证
- [ ] 版本号显示检查

## 检查清单

### 发布前
- [ ] 版本号已更新（代码 + 文档）
- [ ] 提交信息清晰准确
- [ ] Git 标签已创建
- [ ] 标签注释完整

### 发布后
- [ ] CHANGELOG 已更新
- [ ] 构建成功
- [ ] 测试通过
- [ ] 标签已推送（如需远程发布）

## 常见问题

### Q: 忘记更新某个文件的版本号怎么办？

**A**: 可以修改后重新提交，然后删除旧标签并重新创建：

```bash
# 删除本地标签
git tag -d v0.2.1

# 删除远程标签（如已推送）
git push origin :refs/tags/v0.2.1

# 重新创建标签
git tag -a v0.2.1 -m "版本 0.2.1"

# 推送新标签
git push origin v0.2.1
```

### Q: 如何查看某个版本的差异？

**A**: 使用 git diff 命令：

```bash
# 查看两个标签之间的差异
git diff v0.2.0 v0.2.1

# 查看标签与当前的差异
git diff v0.2.1 HEAD
```

## 参考资源

- [语义化版本规范](https://semver.org/lang/zh-CN/)
- [Git 标签管理](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE)

## 附录：完整发布脚本示例

```bash
#!/bin/bash
# 版本发布脚本

VERSION="0.2.1"

echo "开始准备发布版本 $VERSION"

# 1. 更新 wails.json
sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/g" wails.json

# 2. 更新 version.go
sed -i "s/const AppVersion = \".*\"/const AppVersion = \"$VERSION\"/g" internal/service/version.go

# 3. 更新文档
sed -i "s/v0\.2\.0/v$VERSION/g" docs/功能清单.md
sed -i "s/v0\.2\.0/v$VERSION/g" docs/功能清单核对报告.md
sed -i "s/v0\.2\.0/v$VERSION/g" docs/时间修正记录.md
sed -i "s/v0\.2\.0/v$VERSION/g" docs/项目管理/PROJECT_STATUS.md
sed -i "s/v0\.2\.0/v$VERSION/g" docs/项目管理/README.md

# 4. 提交更改
git add -A
git commit -m "发布：版本 $VERSION"

# 5. 创建标签
git tag -a "v$VERSION" -m "版本 $VERSION"

echo "版本 $VERSION 准备完成！"
echo "请检查更改并推送："
echo "  git push origin main"
echo "  git push origin v$VERSION"
```

使用方法：
```bash
chmod +x scripts/release.sh
./scripts/release.sh
```
