# T1 Tour Management System - 版本控制指南
# Version Control Guide

## 版本类型说明 (Version Types Explanation)

### 1. 生产版本 (Production Release)
- **格式**: `1.0.0`, `1.2.3`, `2.0.0`
- **用途**: 正式发布给用户使用的稳定版本
- **特点**: 
  - 功能完整且稳定
  - 经过充分测试
  - 直接部署到生产环境

### 2. 发布候选版本 (Release Candidate - RC)
- **格式**: `1.0.0-rc.1`, `1.0.0-rc.2`
- **含义**: 准备发布的候选版本
- **用途**: 
  - 最终测试阶段
  - 功能冻结，只修复bug
  - 用于最终用户验收测试
- **特点**:
  - 功能完整
  - 接近生产就绪状态
  - 如果测试通过，去掉 `-rc` 就是正式版本

### 3. 测试版本 (Beta)
- **格式**: `1.0.0-beta.1`, `1.0.0-beta.2`
- **含义**: 测试版本
- **用途**: 
  - 功能开发中，用于内部测试
  - 早期用户反馈收集
  - 性能测试和稳定性验证
- **特点**:
  - 功能可能还在开发中
  - 可能存在已知问题
  - 用于早期测试和反馈

### 4. 开发版本 (Development)
- **格式**: `1.0.0-dev.1`, `1.0.0-dev.2`
- **含义**: 用于团队审查的开发版本
- **用途**: 
  - 部署到开发环境进行团队审查
  - 团队内部测试和展示
  - 代码审查和功能验证
- **特点**:
  - 用于开发团队内部审查和展示
  - 不对外发布
  - 快速迭代和测试

## 推荐发布流程 (Recommended Release Process)

### 开发阶段 (Development Phase)
```
开发 → 测试 → 修复 → 再次测试
```

### 版本发布流程 (Version Release Flow)
```
1. 开发完成 → 创建dev版本
   .\scripts\version.ps1 patch --dev

2. Dev测试通过 → 创建beta版本
   .\scripts\version.ps1 patch --beta

3. Beta测试通过 → 创建RC版本
   .\scripts\version.ps1 patch --rc

4. RC测试通过 → 创建生产版本
   .\scripts\version.ps1 patch
```

## 使用示例 (Usage Examples)

### 1. 创建Development版本 (用于团队审查)
```powershell
# 创建dev版本进行团队审查
.\scripts\version.ps1 patch --dev "Add new booking feature"

# 结果: 1.0.0 → 1.0.1-dev.1
```

### 2. 创建Beta版本 (用于测试)
```powershell
# 创建beta版本进行测试
.\scripts\version.ps1 minor --beta "New user interface"

# 结果: 1.0.1-dev.1 → 1.1.0-beta.1
```

### 3. 创建Release Candidate (最终测试)
```powershell
# 创建RC版本进行最终测试
.\scripts\version.ps1 patch --rc "Fix critical bugs"

# 结果: 1.1.0-beta.1 → 1.1.0-rc.1
```

### 4. 创建生产版本 (正式发布)
```powershell
# 创建生产版本
.\scripts\version.ps1 patch "Production release"

# 结果: 1.1.0-rc.1 → 1.1.0
```

## 版本号规则 (Version Number Rules)

### 语义化版本控制 (Semantic Versioning)
- **主版本号 (Major)**: 不兼容的API修改
- **次版本号 (Minor)**: 向下兼容的功能性新增
- **修订号 (Patch)**: 向下兼容的问题修正

### 版本升级规则
- **Major**: 重大变更，可能破坏向后兼容性
  - 例如: `1.0.0` → `2.0.0`
- **Minor**: 新功能，保持向后兼容
  - 例如: `1.0.0` → `1.1.0`
- **Patch**: Bug修复，保持向后兼容
  - 例如: `1.0.0` → `1.0.1`

## 环境部署策略 (Environment Deployment Strategy)

### Development环境
- **用途**: 团队审查、功能展示
- **版本**: `-dev.*` 版本
- **部署**: 自动部署到开发环境

### 测试环境
- **用途**: 集成测试、性能测试
- **版本**: `-beta.*` 版本
- **部署**: 手动部署到测试环境

### 预生产环境
- **用途**: 最终验收测试
- **版本**: `-rc.*` 版本
- **部署**: 手动部署到预生产环境

### 生产环境
- **用途**: 正式用户使用
- **版本**: 正式版本 (无后缀)
- **部署**: 手动部署到生产环境

## 最佳实践 (Best Practices)

### 1. 版本命名规范
- 使用语义化版本控制
- 预发布版本使用 `-` 分隔符
- 版本号递增规则明确

### 2. 发布流程
- 每个版本都要经过测试
- 重大问题修复后重新创建版本
- 保持版本历史记录完整

### 3. 文档维护
- 及时更新CHANGELOG.md
- 记录每个版本的变更内容
- 维护版本发布说明

### 4. 团队协作
- 明确版本发布权限
- 建立代码审查流程
- 定期进行版本回顾

## 常见问题 (FAQ)

### Q: 什么时候使用dev版本？
A: 当需要部署到开发环境进行团队审查和功能展示时。

### Q: 什么时候使用beta版本？
A: 当功能开发完成，需要进行早期测试和收集用户反馈时。

### Q: 什么时候使用RC版本？
A: 当功能测试完成，需要进行最终验收测试时。

### Q: 如何从预发布版本升级到生产版本？
A: 使用相同的版本类型，但不加预发布标识符。例如：`1.0.0-rc.1` → `1.0.0`

### Q: 如果RC版本发现问题怎么办？
A: 修复问题后创建新的RC版本：`1.0.0-rc.1` → `1.0.0-rc.2`

### Q: 如何回滚版本？
A: 使用git tag和git reset命令，或者创建新的修复版本。

## 脚本使用说明 (Script Usage)

### 基本语法
```powershell
.\scripts\version.ps1 [major|minor|patch] [commit_message] [--dev|--rc|--beta]
```

### 参数说明
- `major|minor|patch`: 版本升级类型
- `commit_message`: 可选的提交信息
- `--dev`: 创建development版本
- `--rc`: 创建release candidate版本
- `--beta`: 创建beta版本

### 示例命令
```powershell
# 查看当前版本
.\scripts\version.ps1

# 创建dev版本
.\scripts\version.ps1 patch --dev "Fix booking bug"

# 创建beta版本
.\scripts\version.ps1 minor --beta "Add payment feature"

# 创建RC版本
.\scripts\version.ps1 patch --rc "Final testing"

# 创建生产版本
.\scripts\version.ps1 patch "Production release"
``` 