当前位置: 首页 > news >正文

从MyJUnit反思Java项目的工程实践(版本控制篇)

MyJUnit 反思Java项目的工程实践(版本控制篇)

参考资料

  1. deepseek
  2. github copilot
  3. CSDN-Git代码管理工作流程:GitFlow详解
  4. Conventional Commits手册
  5. 封面来自 qwen-image

遵循 git flow 分支管理模型

Git Flow 是一种围绕项目发布的核心分支模型, 它规定了不同的开发任务应当存放在不同的分支上, 使得开发更加结构化.

Git FLow 的核心是两种主分支和三种辅助分支:

  1. 主分支(master/main):
    • 用途: 用于存放稳定, 可以随时部署到生产环境的代码. MyJUnit 的每一个正式发布版本都应当在该分支打上Tag
    • 规则:
      • 仅允许通过 release 或 hotfix 分支合并代码
      • 每次合并后必须打上语义化版本标签(如v1.0.0)
  2. 开发分支(develop):
    • 用途: 作为开发集成基线,所有新功能、修复均合并至此分支。
    • 规则:
      • 是创建其他临时分支(如 feature、release)的起点。
      • 必须始终保持最新状态, 定期与主分支同步
  3. 功能分支 (feature/):从 develop 分支创建,用于开发新功能(例如 feature/add-parameterized-tests)。开发完成后合并回 develop 分支。
  4. 发布分支(release/): 当 develop 分支积累了足够的新功能并准备发布时,从 develop 创建(例如 release/v1.1.0)。此分支仅用于修复 Bug、生成文档等发布准备工作,完成后分别合并到 master (打 Tag) 和 develop 分支。
  5. 热修复分支 (hotfix/):从 master 分支创建,用于紧急修复生产环境中的 Bug (例如 hotfix/fix-npe-in-assertion)。修复后需同时合并回 master (打 Tag) 和 develop 分支。

Conventional Commits 提交规范(详细实践)

Conventional Commits 规范是一种轻量级的约定,它通过一套简单的规则来创建清晰的提交历史

commit 提交信息结构

规范约定 commit 的结构如下所示:

原文
<type>[optional scope]: <description>[optional body][optional footer(s)]
译文:
<类型>[可选 范围]: <描述>[可选 正文][可选 脚注]
  • type (类型,必需):表明提交的性质。常用类型包括:
    • feat:新增功能(对应 MINOR 版本号递增)。
    • fix:修复 Bug(对应 PATCH 版本号递增)。
    • docs:文档更新。
    • style:代码格式调整(不影响代码逻辑)。
    • refactor:代码重构(既非新增功能,也非修复 Bug)。
    • test:增加或修正测试用例。
    • chore:构建过程或辅助工具的变动。
  • scope (范围,可选):说明提交影响的部分或模块。例如 fix(assertions), docs(readme)。
  • description (描述,必需):对本次变更的简短描述。
  • body (正文,可选):提供更详细的变更动机或与之前行为的对比。
  • footer (脚注,可选):通常用于记录破坏性变更 (BREAKING CHANGE) 或关闭 Issue(例如 Closes #123)。
在 MyJUnit 项目中的操作示例
  • 新增一个断言方法:
    feat(assertions): add `assertNotNull` method
    
  • 修复 Before 注解的逻辑:
    fix(core): execute @Before methods in correct order
    
  • 为项目添加 CI 配置:
    chore(ci): add GitHub Actions workflow for running tests
    
  • 修复了一个破坏性变更(改变了公共 API):
    refactor(core)!: rename TestRunner to TestEngineBREAKING CHANGE: The public class `TestRunner` has been renamed to `TestEngine` for better semantics.
    
    (注意!用于提醒破坏性变更)
http://www.dtcms.com/a/350068.html

相关文章:

  • 数据库迁移幂等性介绍(Idempotence)(Flyway、Liquibase)ALTER、ON DUPLICATE
  • RabbitMQ面试精讲 Day 30:RabbitMQ面试真题解析与答题技巧
  • 深入解析MyBatis Mapper接口工作原理
  • Ubuntu24.04配置yolov5
  • 封装的form表单,校验规则(rules)只在提交时触发,为空时点击提交触发,再次输入内容也不显示校验规则(rules)
  • 机器学习】(12) --随机森林
  • Day27 进程管理(PCB、状态、调度、原语与资源管理)
  • pikachu之Over permission
  • 基于SpringBoot的宠物领养系统的设计与实现(代码+数据库+LW)
  • QML中的Connections
  • Vue 3 defineOptions 完全指南:让组件选项声明更现代化
  • vb6编绎COM DLL(ACTIVEX对象)时兼容性设置
  • bisheng 后端初始化数据(main.py > init_data.py)
  • 25072班8.25日 数据结构作业
  • 04-Maven工具介绍
  • kafka 副本集设置和理解
  • 《Spring Boot 进阶:从零到一打造自定义 @Transactional》 ——支持多数据源、动态传播行为、可插拔回滚策略
  • AI系列 - Claude 与 Qwen 模型自动补全对比:谁更胜一筹?
  • 电力系统稳定性的挑战与智能控制新范式
  • 网络与信息安全有哪些岗位:(8)安全审计员
  • C 语言:第 20 天笔记:typedef(类型重命名规则、应用场景与实战案例)
  • 黑客窃取 EDR 检测未检测到的 Windows 机密和凭证
  • 讲解计网中OSI模型及各层作用
  • 网闸和防火墙各有什么长处?
  • ValueTask 实战指南:解锁 .NET 异步编程的性能秘密
  • maui中配置安卓手机在测试环境连接网络
  • 创建Java集成开发环境
  • 车载诊断架构 --- 基于以太网做software download的疑问汇总
  • [QMT量化交易小白入门]-八十四、LSTM模型对期货市场的秒级Tick数据进行预测
  • 14.examples\01-Micropython-Basics\demo_yield.py 加强版