Skip to content

Git 规范

操作前检查

执行 git 命令前必须:

  1. 确认当前工作目录(pwd
  2. Monorepo 项目应从根目录执行 git 操作
  3. 使用 -C 参数指定路径,或在正确目录下执行
bash
# 推荐:从根目录执行
git -C <project-root> status

# 或先切换目录
cd <project-root> && git status

提交规范

采用简化版 Conventional Commits 规范:

提交类型

类型说明示例
feat新功能feat: 添加文档导入功能
fixBug 修复fix: 修复文件上传失败问题
docs文档更新docs: 更新安装说明
refactor代码重构/优化refactor: 优化列表渲染性能
test测试相关test: 添加登录单元测试
config构建/配置/工具/依赖config: 升级依赖版本
style代码格式(不影响逻辑)style: 格式化代码

说明config 包含构建配置、CI 配置、依赖管理等;refactor 包含代码重构、性能优化等。

提交格式

<type>(<scope>): <subject>

<body>

<footer>

示例:

feat(doc): 添加 PDF 解析功能

- 支持 PDF 文本提取
- 支持 PDF 表格识别
- 添加解析进度显示

Closes #123

提交要求

  1. 语言:中文或英文均可,保持一致
  2. 时态:使用祈使句(如 "添加" 而非 "添加了")
  3. 长度:标题不超过 50 字符,正文每行不超过 72 字符
  4. 关联:如有相关 Issue,在 footer 中关联
  5. 简洁:简单提交使用单行标题即可,无需额外正文

AI 辅助提交规范

当使用 AI 辅助生成提交时:

  1. 简洁输出:简单变更使用单行标题,无需详细正文
  2. 中文优先:提交类型使用英文,如docs, feat等,其他内容使用中文
  3. 无签名:不添加 Co-Authored-By 等水印信息
  4. 示例
    config: 初始化项目配置

分支策略

采用 Git Flow 变体:

main ───────●───────●───────●──────→ 稳定版本
            ↑       ↑
            │       │
release/*───┘       │

develop ───●──●──●──●──●──●──→ 开发分支
           ↑     ↑
           │     │
feature/*──┘     └── hotfix/*

分支类型

分支命名说明生命周期
mainmain生产环境,稳定版本永久
developdevelop开发集成分支永久
featurefeature/*功能开发临时
releaserelease/*发布准备临时
hotfixhotfix/*紧急修复临时

分支命名

feature/功能名称    # 例:feature/pdf-parser
hotfix/问题描述     # 例:hotfix/login-error
release/版本号      # 例:release/v1.0.0

合并规则

  1. feature/*develop:功能开发完成后
  2. developrelease/*:准备发布时
  3. release/*main:发布完成
  4. hotfix/*main + develop:紧急修复

合并策略

合并功能分支必须使用 --no-ff 参数,保留分叉历史线:

bash
git merge --no-ff feature/xxx

禁止对功能分支使用 Fast-forward 合并。

例外:hotfix/*develop 可以使用 Fast-forward。

工作流程

功能开发

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

# 2. 开发并提交
git add .
git commit -m "feat: 添加新功能"

# 3. 推送到远程
git push origin feature/new-feature

# 4. 创建 Pull Request 合并到 develop

紧急修复

bash
# 1. 从 main 创建修复分支
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug

# 2. 修复并提交
git add .
git commit -m "fix: 修复关键问题"

# 3. 合并到 main 和 develop
git checkout main
git merge hotfix/critical-bug
git checkout develop
git merge hotfix/critical-bug

# 4. 删除修复分支
git branch -d hotfix/critical-bug

版本规范

采用语义化版本(Semantic Versioning):

MAJOR.MINOR.PATCH

例:1.2.3
  • MAJOR:不兼容的 API 变更
  • MINOR:向后兼容的功能新增
  • PATCH:向后兼容的问题修复

版本标签

bash
# 创建标签
git tag -a v1.0.0 -m "发布 v1.0.0"

# 推送标签
git push origin v1.0.0

忽略文件

多级 .gitignore 配置

本项目采用两级 .gitignore 配置:

文件位置负责范围说明
/.gitignore根目录及全局通用忽略规则(对所有子目录生效)
/desktop/.gitignoredesktop 子目录前端 + Tauri 专属规则(覆盖/补充根目录规则)

重要.gitignore 中的路径是相对于该文件所在目录的。子目录的 .gitignore 只需包含该模块专属的规则,避免与根目录重复。

忽略文件验证

触发时机

以下场景必须验证 .gitignore 的合理性:

  1. 引入新组件/包:安装新的 npm 包、Rust crate 或其他依赖
  2. 项目初始化:创建新项目、工作区或子模块
  3. 提交前检查:每次 git commit

验证规则

检查项说明操作
依赖目录node_modules/target/ 等是否已忽略必须忽略
构建产物dist/build/*.exe必须忽略
敏感文件.env、密钥文件、配置文件中的密码必须忽略
IDE 配置.idea/.vscode/(除非团队共享)通常忽略
锁文件Cargo.lock(应用项目)、pnpm-lock.yaml视情况而定

验证流程

新增组件/包 → 检查是否产生新的忽略需求

            是否确认忽略规则?
           ↙        ↘
         是          否(不确定)
          ↓              ↓
      更新 .gitignore    提醒用户确认
          ↓              ↓
       继续操作      等待用户决策

Human-in-Loop 机制

遇到以下情况时,必须暂停并请求用户确认:

  1. 不确定是否应忽略:文件类型不常见,或用途不明确
  2. 可能影响团队协作:如 .vscode/ 配置,可能包含共享设置
  3. 安全敏感:涉及密钥、凭证、私有配置等

确认方式

⚠️ 检测到新文件类型 [文件路径],建议:
  - 忽略:[理由]
  - 提交:[理由]
请确认处理方式?

简洁性原则

始终确保仓库简洁:

  • 不提交:依赖、构建产物、临时文件、敏感信息
  • 可提交:源代码、配置模板(.env.example)、文档、必要资源
  • 定期清理:检查是否有不应提交的文件已进入仓库

基于 MIT 许可发布