forked from linjing/standard
4.6 KiB
4.6 KiB
Git分级与项目管理规范文档
一、Git分级体系
1. 个人仓库(Personal Repositories)
- 权限:开发者私有,可设置公开/内部/私有
- 用途:
- 个人代码片段
- 实验性项目
- 未公开的研究成果
- 管理策略:
- 需关联公司邮箱
- 禁止存放敏感数据
- 每季度清理无效仓库
2. 团队仓库(Team Repositories)
- 权限:团队成员可读写,外部人员只读
- 用途:
- 部门级工具开发
- 共享研究成果
- 跨项目组件
- 管理策略:
- 团队负责人审批加入
- 每周同步更新日志
- 需绑定Jira项目看板
3. 项目仓库(Project Repositories)
- 权限:项目组成员按角色分配(开发/测试/运维)
- 用途:
- 量化策略实盘系统
- 核心交易平台
- 数据处理流水线
- 管理策略:
- 强制代码审查(2人+)
- 生产分支双因素认证
- 每日自动化测试报告
4. 组织仓库(Organization Repositories)
- 权限:公司级管理员控制
- 用途:
- 基础架构代码
- 合规性文档
- 公司级工具链
- 管理策略:
- 提交需经过审计
- 所有分支加密存储
- 变更需提前3天报备
二、项目管理规范
1. 项目分类
类型 | 特点 | 分支策略 | 保护机制 |
---|---|---|---|
核心项目 | 影响实盘交易 | Git Flow | 生产分支只读 |
实验性项目 | 策略验证阶段 | GitHub Flow | 每日自动销毁测试环境 |
工具类项目 | 通用组件开发 | Trunk-Based | 版本语义化控制 |
2. 分支命名规范
# 示例:
feature/20250307-strategy-improvement # 功能分支
hotfix/20250307-trading-bugfix # 紧急修复
release/v2.3.1 # 发布分支
3. 代码审查流程
- 开发者提交Pull Request
- 自动触发单元测试(覆盖率需>90%)
- 技术负责人审核架构设计
- 风险控制部门审查合规性
- 合并后自动生成CHANGELOG
三、仓库管理细则
1. 仓库初始化模板
- 必须包含:
- LICENSE文件(MIT/公司专有)
- README.md(含架构图、部署说明)
- .gitignore(含Python/R/Java等配置)
- CI/CD配置文件(GitHub Actions示例)
2. 仓库维护周期
类型 | 维护频率 | 保留期限 |
---|---|---|
活跃项目 | 每日备份 | 永久 |
归档项目 | 每周扫描 | 5年 |
废弃项目 | 立即冻结 | 1年 |
3. 权限回收机制
- 员工离职时:
- 立即禁用仓库访问权限
- 72小时内转移代码所有权
- 30天内彻底删除个人贡献记录
四、组织管理架构
1. 角色矩阵
角色 | 权限范围 | 职责 |
---|---|---|
公司管理员 | 所有仓库读写+权限分配 | 制定全局策略 |
项目负责人 | 项目仓库完全控制 | 代码质量监管 |
安全审计员 | 只读+日志查询 | 监控异常操作 |
普通开发者 | 按项目授权 | 提交符合规范的代码 |
2. 协作流程
graph TD
A[开发者提交代码] --> B{自动化检查}
B -->|通过| C[代码审查]
B -->|失败| D[返回修改]
C --> E{风险评估}
E -->|通过| F[合并到主分支]
E -->|拒绝| D
F --> G[触发生产部署]
五、工具链集成方案
-
CI/CD:
- GitLab CI/CD用于量化策略回测
- Jenkins Pipeline管理交易系统部署
-
文档协作:
- Confluence关联仓库README
- MkDocs生成API文档
-
监控系统:
- Prometheus监控代码提交频率
- Grafana展示仓库健康度指标
六、最佳实践
- 每周五进行代码质量抽查
- 每月发布《仓库健康度报告》
- 每季度组织Git安全培训
- 每年更新《敏感代码扫描规则》
附录:示例配置
# .github/workflows/security-check.yml
name: Security Scan
on: [push]
jobs:
detect-secrets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install detect-secrets
- run: detect-secrets scan --update .secrets.baseline