# Git 分支策略

## 分支结构

### 主要分支

#### main
- **用途**: 生产就绪的稳定代码
- **保护**: 不允许直接推送，只能通过PR合并
- **特点**: 始终保持可部署状态

#### develop
- **用途**: 开发集成分支，所有功能分支的合并目标
- **更新频率**: 持续集成新功能
- **特点**: 最新的开发进度，但可能不稳定

### 功能分支

#### feature/ui-redesign
- **用途**: 界面重设计相关开发
- **基于**: develop分支
- **包含**:
  - 主界面布局重构
  - 设备卡片组件开发
  - 样式主题系统

#### feature/database-enhancement
- **用途**: 数据库优化和功能增强
- **基于**: develop分支
- **包含**:
  - 数据库连接管理改进
  - 新表结构实现
  - 数据模型优化

#### feature/component-system
- **用途**: 可复用组件系统开发
- **基于**: develop分支
- **包含**:
  - DeviceCard组件
  - StatusPanel组件
  - MapViewer组件

### 支持分支

#### hotfix/critical-fix
- **用途**: 紧急修复生产问题
- **基于**: main分支
- **合并到**: main 和 develop

#### release/v2.0.0
- **用途**: 版本发布准备
- **基于**: develop分支
- **包含**: bug修复、文档更新、版本号调整

## 分支命名规范

### 功能分支
```
feature/<功能描述>
feature/ui-redesign
feature/database-enhancement
feature/device-card-component
```

### 修复分支
```
bugfix/<问题描述>
bugfix/connection-timeout
bugfix/ui-layout-issue
```

### 热修复分支
```
hotfix/<紧急问题>
hotfix/database-crash
hotfix/security-vulnerability
```

### 发布分支
```
release/<版本号>
release/v2.0.0
release/v2.0.1
```

## 工作流程

### 1. 功能开发流程

```bash
# 1. 从develop创建功能分支
git checkout develop
git pull origin develop
git checkout -b feature/ui-redesign

# 2. 开发过程中定期提交
git add .
git commit -m "feat: 实现设备卡片基础布局"
git commit -m "feat: 添加设备状态指示器"
git commit -m "style: 应用新的颜色主题"

# 3. 推送到远程分支
git push origin feature/ui-redesign

# 4. 创建Pull Request
# 通过GitHub/GitLab界面创建PR
# 目标分支: develop
# 描述: 详细的功能说明和测试结果
```

### 2. 代码审查流程

#### PR模板
```markdown
## 功能描述
简要描述此PR实现的功能

## 变更内容
- [ ] UI界面重设计
- [ ] 数据库结构优化
- [ ] 新增组件开发
- [ ] 性能优化
- [ ] Bug修复

## 测试清单
- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 手动功能测试
- [ ] 性能测试
- [ ] 兼容性测试

## 截图/演示
（如果有UI变更，请提供截图或GIF演示）

## 相关Issues
Closes #123, Relates to #456
```

### 3. 集成流程

```bash
# 1. 功能完成后合并到develop
git checkout develop
git pull origin develop
git merge feature/ui-redesign
git push origin develop

# 2. 删除已合并的功能分支
git branch -d feature/ui-redesign
git push origin --delete feature/ui-redesign
```

### 4. 发布流程

```bash
# 1. 从develop创建发布分支
git checkout develop
git pull origin develop
git checkout -b release/v2.0.0

# 2. 版本准备工作
# 更新版本号
# 更新CHANGELOG.md
# 最后的bug修复

# 3. 合并到main和develop
git checkout main
git merge release/v2.0.0
git tag v2.0.0
git push origin main --tags

git checkout develop
git merge release/v2.0.0
git push origin develop

# 4. 删除发布分支
git branch -d release/v2.0.0
```

## 提交信息规范

### 提交类型
- **feat**: 新功能
- **fix**: 修复bug
- **docs**: 文档更新
- **style**: 代码格式调整（不影响功能）
- **refactor**: 重构代码
- **test**: 测试相关
- **chore**: 构建过程或辅助工具的变动

### 提交格式
```
<type>(<scope>): <subject>

<body>

<footer>
```

### 示例
```bash
git commit -m "feat(ui): 实现新的设备卡片组件

- 添加设备状态实时显示
- 实现信号强度进度条
- 支持设备操作快捷按钮

Closes #123"

git commit -m "fix(database): 修复连接池内存泄漏问题"

git commit -m "docs: 更新API文档和用户手册"
```

## 分支保护规则

### main分支保护
- 禁止直接推送
- 要求PR审查
- 要求状态检查通过
- 要求分支是最新的

### develop分支保护
- 要求PR审查
- 要求CI构建通过
- 允许管理员强制推送（紧急情况）

## CI/CD集成

### 自动化检查
```yaml
# .github/workflows/ci.yml
name: CI
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Qt
      uses: jurplel/install-qt-action@v2
    - name: Build
      run: |
        qmake CasualtySightPlus.pro
        make
    - name: Test
      run: |
        # 运行测试
        make test
```

## 最佳实践

### 1. 分支管理
- 保持分支简洁，及时删除已合并的分支
- 定期同步develop分支到功能分支
- 避免长期存在的功能分支

### 2. 提交管理
- 小而频繁的提交
- 每个提交只做一件事
- 提交信息清晰描述变更内容

### 3. 代码审查
- 所有代码必须经过审查
- 审查重点关注功能正确性、代码质量、性能影响
- 及时响应审查意见

### 4. 发布管理
- 版本号遵循语义化版本规范
- 每个版本都有完整的CHANGELOG
- 重要版本需要充分测试

## 紧急情况处理

### 生产环境紧急修复
```bash
# 1. 从main创建hotfix分支
git checkout main
git checkout -b hotfix/critical-database-fix

# 2. 快速修复
git commit -m "hotfix: 修复数据库连接泄漏导致的崩溃"

# 3. 同时合并到main和develop
git checkout main
git merge hotfix/critical-database-fix
git tag v2.0.1
git push origin main --tags

git checkout develop
git merge hotfix/critical-database-fix
git push origin develop
```

此分支策略确保了代码质量、团队协作效率和项目的稳定发布。