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.pswp.cn/news/920314.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920314.shtml
英文地址,请注明出处:http://en.pswp.cn/news/920314.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小工具推荐

小工具 ​ 平时不太喜欢去搜罗一些好用的工具&#xff0c;但是看到自己感兴趣的还是会记下来&#xff0c;有的是github上的开源项目&#xff0c;有的是一些直接在线的工具。主要是除了工作时间也不知道去干点什么&#xff0c;或者是和朋友玩玩游戏&#xff0c;或者是city walk…

【js】加密库sha.js 严重漏洞速查

前言sha.js 是 JavaScript 生态里最常用的轻量级加密库。它由 Browserify 社区维护&#xff0c;体积不足 20 KB&#xff0c;却实现了 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 全系列算法&#xff0c;是 crypto-browserify、webpack、web3.js 等数百个流行包的“根依赖”。而…

FPGA入门学习路径

FPGA入门学习路径 专业基础 数电&#xff08;数字电路基础-CSDN博客&#xff09; 语法 Verilog&#xff08;Verilog硬件描述语言-CSDN博客&#xff09; VHDL&#xff08;VHDL硬件描述语言-CSDN博客&#xff09; FPGA开发流程 常用接口设计 学习目的&#xff1a;通过简单…

HTML响应式设计的颜色选择器,适配各种屏幕尺寸

颜色选择器 响应式设计的颜色选择器&#xff0c;适配各种屏幕尺寸 支持色相滑块和RGB数值两种调色方式 点击颜色值或复制按钮即可复制十六进制颜色代码 自动根据背景色调整文字颜色确保可读性 包含复制成功提示动画效果 现代化UI设计&#xff0c;采用圆角、阴影和渐变背景 完全…

ChatGPT登录不进怎么办?

ChatGPT登录不进的核心原因分类ChatGPT登录失败并非单一问题导致&#xff0c;通常与网络环境、账号状态、设备设置及平台限制相关&#xff0c;不同场景下的故障表现与诱因存在明显差异&#xff0c;可分为以下四类&#xff1a;网络连接与地域限制&#xff1a;ChatGPT对访问地域有…

【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别

【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别【一】核心思想【1】HashMap​&#xff08;1&#xff09;概括&#xff08;2&#xff09;&#x1f680;线程不安全的场景和原因1-场景一&#xff1a;Put 操作导致的数据覆盖/丢失 (Lost Update)​​2-场景二&#xff1a…

Android 中使用开源库 ZXing 生成二维码图片

在 Android 中生成二维码是一个比较常见的功能&#xff0c;可以使用开源库 ZXing&#xff08;Zebra Crossing&#xff09;库来实现&#xff0c;这是一个非常流行的二维码生成和扫描库。 1、添加依赖库 在 app/build.gradle.kt 中添加依赖库。 dependencies { ......implementat…

vue 如何使用 vxe-table 来实现跨表拖拽,多表联动互相拖拽数据

vue 如何使用 vxe-table 来实现跨表拖拽&#xff0c;多表联动互相拖拽数据 row-drag-config.isCrossTableDrag 启用跨表格、多表格互相拖拽&#xff1b;跨表拖拽需要确保数据主键不重复&#xff0c;通过 row-config.keyField 指定主键字段名 查看官网&#xff1a;https://vxe…

微生产力革命:AI解决生活小任务分享会

微生产力革命的概念微生产力革命指利用AI技术高效解决日常琐碎任务&#xff0c;释放时间与精力。其核心在于将重复性、低价值的事务自动化&#xff0c;聚焦创造性或高价值活动。AI解决生活小任务的典型场景健康管理 AI健身助手可定制个性化训练计划&#xff0c;通过摄像头实时纠…

标量、向量、矩阵和张量的区别

注&#xff1a;本文为 “标量、向量、矩阵和张量的区别” 相关合辑。 英文引文&#xff0c;机翻未校。 如有内容异常&#xff0c;请看原文。 Difference Between Scalar, Vector, Matrix and Tensor 标量、向量、矩阵和张量的区别 Last Updated : 06 Aug, 2025 In the conte…

VScode,设置自动保存

在搜索框输入“autoSave”或VSCode提供以下自动保存选项&#xff1a; 在搜索框输入“autoSave” Off&#xff1a;禁用自动保存。 On Focus Change&#xff1a;当您将焦点从编辑器移开时自动保存。 On Window Change&#xff1a;当您切换窗口选项卡或编辑器时自动保存。 After D…

2025.8.27链表_链表逆置

链表中的指针只是用来标记&#xff0c;具体连接方式&#xff0c;是按照node.next链接。JAVA中头节点存东西&#xff0c;不是空的。核心原理&#xff1a;Java 的参数传递是"值传递"&#xff0c;但对象引用是"值传递引用"也就是传过来了ListNode head。headh…

ssc37x平台的音频应用demo

//ao_test.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include

PPT处理控件Aspose.Slides教程:在.NET中开发SVG到EMF的转换器

SVG和EMF都是基于矢量的格式。许多传统的 CAD 和报告工具仍然倾向于使用 EMF 文件格式&#xff0c;因为它具有更广泛的兼容性。如果您正在开发一个 .NET 项目&#xff0c;并希望实现自动化&#xff0c;使 SVG 到 EMF 的转换变得轻松便捷。Aspose.Slides for .NET是一个功能强大…

深入理解HTTP:请求、响应与状态码解析

深入理解HTTP&#xff1a;请求、响应与状态码解析一&#xff1a;概述二&#xff1a;协议版本三&#xff1a;协议详解1&#xff09;请求报文2&#xff09;响应报文四&#xff1a;状态码1&#xff09;1xx&#xff1a;信息状态码2&#xff09;2xx&#xff1a;成功状态码3&#xff…

浏览器输入网址回车后,访问网页全流程解析!

你在地址栏敲下 https://baidu.com.com 并回车&#xff0c;几百毫秒内发生了很多事&#xff1a;浏览器先想“这个域名的 IP 我记得吗”&#xff0c;接着去找 DNS&#xff1b;建立连接时还要握个手&#xff08;TCP/QUIC&#xff09;顺便打个招呼&#xff08;TLS 证书校验、ALPN …

[Linux]学习笔记系列 -- mm/percpu

文章目录mm/percpu.c Per-CPU Variables Management Per-CPU数据管理的核心实现历史与背景这项技术是为了解决什么特定问题而诞生的&#xff1f;它的发展经历了哪些重要的里程碑或版本迭代&#xff1f;目前该技术的社区活跃度和主流应用情况如何&#xff1f;核心原理与设计它的…

企微会话风控「智脑」:源雀SCRM的AI合规守护引擎

一&#xff1a;功能概述源雀SCRM会话风控功能是一款专为企业客户关系管理设计的智能风控解决方案&#xff0c;通过双重审计机制保障企业会话合规性&#xff0c;发送违规内容及时提醒通知企业负责人。二&#xff1a;核心功能1. 普通风控审计基于Lucene全文关键词检索&#xff1a…

Java岗位供过于求,如何破局?

程序员面试背八股&#xff0c;可以说是现在互联网开发岗招聘不可逆的形式了&#xff0c;其中最卷的当属Java&#xff01;&#xff08;网上动不动就是成千上百道的面试题总结&#xff09;你要是都能啃下来&#xff0c;平时技术不是太差的话&#xff0c;面试基本上问题就不会太大…

白话FNN、RNN、Attention和self-attention等

我尝试同过炸酱面的例子,让所有人都能理解Transformer的核心Self-Attention。你在做老北京炸酱面的酱,食谱包括一系列步骤:准备食材(干黄酱、甜面酱、猪肉、葱姜等)、洗菜、切菜(葱姜蒜等)、炒肉,调和干黄酱、甜面酱、凉水、酱油后,加入锅中,慢炖成酱。我们将从FNN开…